最佳实践:你如何在setup.py中列出所需的依赖项?

12 浏览
0 Comments

最佳实践:你如何在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)

0