我现在就是这样做的:
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站点包中安装pyramid
!
但我不想那样。所以我必须在这个项目中安装nose。但我不想成为依赖。我觉得它不应该属于requires
。还没有。不过,我也不想一直手工安装。是的,我知道我有很多不想做的事。。。
但你怎么解决呢?我不想篡改全局python站点包,但我想安装nose作为virtualenv的一部分。
另外,pip安装需求文件。它稍微精确一些,因为我不需要手动指定版本,也不需要担心手动更新setup.py。扔pip freeze > file.txt
就行了。
但是,pip可以返回垃圾,因为我们将垃圾包扔到virtualenv中。
这么多刀片。最好的做法是什么?你如何处理这些问题?
也许我错过了,但是https://github.com/django/django/blob/master/setup.py,Django是怎么做到的?
您可以将需求分为“安装”依赖项和“测试”依赖项,如下所示:
这样,当有人安装包时,只安装“安装”依赖项。所以,如果有人只想使用这个包(而他们对运行测试不感兴趣),那么他们就不必安装测试依赖项。
如果确实要运行测试,可以使用以下命令:
根据docs:
一旦“test”依赖项就位,它将运行“test_suite”命令。既然您提到nose是首选的测试运行程序,我就演示了如何配置它。
顺便说一下,Django setup.py并不是理解setuptools基础知识的最干净的例子。我认为Sentry setup.py是一个值得学习的更好的例子。
相关问题 更多 >
编程相关推荐