最佳实践:你如何在setup.py中列出所需的依赖项?
最佳实践:你如何在setup.py中列出所需的依赖项?
这是我当前的做法:
import os from setuptools import setup, find_packages here = os.path.abspath(os.path.dirname(__file__)) requires = [ 'pyramid', 'pyramid_debugtoolbar', 'waitress', 'requests', 'mock', 'gunicorn', 'mongoengine', ] setup( name='repoapi', version='0.0', description='repoapi', packages=find_packages(), include_package_data=True, zip_safe=False, install_requires=requires, tests_require=requires, test_suite="repoapi", entry_points="""\ [paste.app_factory] main = repoapi:main """, )
这样做可以吗?我遇到了一些问题。例如,对于pyramid,我不能使用全局的nosetests插件来运行测试。我需要在全局的python site-packages中安装`pyramid`!但我不想这样做。所以我必须在项目的虚拟环境中安装nose。但我不希望它成为一个依赖项。我觉得它不应该属于`requires`。但我也不想每次都手动安装。是的,我知道我有很多不想做这个和那个的...
但你会如何解决这个问题?我不想篡改全局的python site-packages,但我想将nose作为虚拟环境的一部分安装。
另外,pip安装依赖文件更准确一些,因为我不需要手动指定版本,也不需要担心手动更新setup.py。只需执行`pip freeze > file.txt`就可以了。
然而,pip可能会返回垃圾,因为我们将垃圾包安装到虚拟环境中。
问题太多了。最佳实践是什么?你是如何处理这些问题的?
也许我错过了,但是Django是如何做到的?[https://github.com/django/django/blob/master/setup.py](https://github.com/django/django/blob/master/setup.py)