这是我当前的做法:
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
setuptools
中的tests_require
已被弃用(41.5.0版本)。目前最新版本为50.3.0。 - Martin Thoma