Joe*_*way 85 python pip setuptools distribute setup.py
我正在使用带有virtualenv的pip来打包和安装一些Python库.
我想我正在做的是一个很常见的场景.我是几个库的维护者,我可以明确地指定依赖项.我的一些库依赖于第三方库,这些库具有我无法控制的传递依赖性.
我想要实现的是让pip install我的一个库下载/安装它的所有上游依赖项.我在pip文档中遇到的问题是,需求文件是否/如何自行完成,或者它们实际上只是对使用的补充install_requires.
我是否会install_requires在所有库中使用指定依赖项和版本范围,然后仅使用需求文件来解决冲突和/或冻结它们以进行生产构建?
让我们假装我生活在一个想象的世界(我知道,我知道),我的上游依赖是直截了当的,并保证永远不会冲突或破坏向后兼容性.我是否会被迫使用pip要求文件或者只是让pip/setuptools/distribute安装所有内容install_requires?
这里有很多类似的问题,但我找不到任何与使用其中一个或者和谐地使用它们一样基本的问题.
Ian*_*ing 66
我的理念是,install_requires应该指出你需要的最低限度.如果您知道某些版本不起作用,它可能包括版本要求; 但它不应该有你不确定的版本要求(例如,你不确定未来的依赖版本是否会破坏你的库).
要求在另一方面文件应说明你知道什么做的工作,可能包括你推荐可选的依赖.例如,您可以使用SQLAlchemy但建议MySQL,因此将MySQLdb放在需求文件中).
总而言之:install_requires是让人们远离那些你知道不起作用的东西,而要求文件引导人们走向你认识的事情.其中一个原因install_requires是始终检查需求,并且在不实际更改包元数据的情况下无法禁用.所以你不能轻易尝试新的组合.只在安装时检查需求文件.
rbp*_*rbp 14
这是我在setup.py中添加的内容:
# this grabs the requirements from requirements.txt
REQUIREMENTS = [i.strip() for i in open("requirements.txt").readlines()]
setup(
.....
install_requires=REQUIREMENTS
)
Run Code Online (Sandbox Code Playgroud)
"Python包装用户指南"有一个关于此主题的页面,我强烈建议您阅读它:
install_requires是否列出了必须安装的包的依赖关系才能使包工作.例如,它并不意味着将依赖项固定到特定版本,而是接受范围install_requires=['django>=1.8'].install_requires通过pip install name-on-pypi和其他工具观察.
requirements.txt只是一个文本文件,您可以选择运行pip install -r requirements.txt.它的意思是将所有依赖项和子依赖项的版本固定,如下所示:django==1.8.1.您可以使用创建一个pip freeze > requirements.txt.(有些服务,比如Heroku,会自动pip install -r requirements.txt为你运行.)pip install name-on-pypi不看requirements.txt,只是在install_requires.
| 归档时间: |
|
| 查看次数: |
19663 次 |
| 最近记录: |