【问题标题】:How do I make Pip respect requirements?如何让 Pip 尊重要求?
【发布时间】:2012-09-04 12:55:21
【问题描述】:

如果我使用 requires 创建 setup.py,Pip 不会安装我的依赖项。

这是我的 setup.py:

from distutils.core import setup

setup(name='my_project',
      description="Just a test project",
      version="1.0",
      py_modules=['sample'],
      requires=['requests'])

我写了一个简单的sample.py:

import requests

def get_example():
    return requests.get("http://www.example.com")

然后我尝试安装它:

$ pip install -e .                                                                                    [15:39:10]
Obtaining file:///tmp/example_pip
  Running setup.py egg_info for package from file:///tmp/example_pip

Installing collected packages: my-project
  Running setup.py develop for my-project

    Creating /tmp/example_pip/my_venv/lib/python2.7/site-packages/my-project.egg-link (link to .)
    Adding my-project 1.0 to easy-install.pth file

    Installed /tmp/example_pip

注意requests,我的依赖没有安装。如果我现在尝试使用我的测试项目:

$ python                                                                                              [15:35:40]
>>> import sample
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/tmp/example_pip/sample.py", line 1, in <module>
    import requests
ImportError: No module named requests

我做错了什么?

【问题讨论】:

  • 我很惊讶地看到这个关闭太本地化了——这是我看到许多 Python 开发人员遇到的 Pip 问题。请关闭者说出原因吗?
  • 确实,这个问题时不时出现;我刚刚将How do I make Pip respect requirements? 标记为这个人的骗子。

标签: python dependencies pip


【解决方案1】:

正确的拼写是install_requires,而不是requires;这确实要求您使用setuptools,而不是distutils

from setuptools import setup

setup(name='my_project',
      description="Just a test project",
      version="1.0",
      py_modules=['sample'],
      install_requires=['requests'])

我可以推荐Python Packaging User Guide 了解细节。

【讨论】:

  • 谢谢,看来the Python docs here 让我误入歧途。 requires 的目的是什么?
  • @WilfredHughes:distutils 实际上早于 Pip 和 easy_install 等自动化工具;我认为添加了install_requires关键字是为了按阶段区分依赖关系(还有一个setup_requires)。
  • Python 文档一般都很好,但它们让我对这个细节感到愤怒。 distutils.core.setup() 的文档甚至没有将install_requires 作为关键字列出
  • @NickT:那是因为install_requiressetuptools 的扩展。
  • 啊……是因为我听说的猴子补丁吗?
猜你喜欢
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 2018-11-18
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
相关资源
最近更新 更多