为了使我的应用程序pip
可安装,我正在与setuptools
和distribute
进行激烈的斗争。我认为我的依赖关系是正确的,即使用pip install myapp
安装可能会正确填充虚拟环境。然而,我想在进行开发时简化开发,所以我的目标是从一个空的virtualenv
开始,让setup.py test
(以及后来的setup.py develop
,但这是一场完全不同的战斗)用所有定义的依赖项来填充它。
现在我的问题是:无论我怎么努力,我得到的都是作为.egg
安装在我的项目目录中的依赖项,这至少是次优的。我尝试创建一个新的setuptools
命令,该命令将使用pip
(这似乎很有效,尽管很尴尬),但这并不是真正的解决方案(即子类化和覆盖)。
那么,如何让setup.py test
填充virtualevn
而不是我的工作目录呢?
根据设计,您不能使tests_requires
或setup_requires
条目进入虚拟环境。这个想法是将执行测试/设置所需的内容和实际使用所安装的软件包所需的信息分开。例如,我可能要求在包上运行测试时需要"覆盖率"模块,但包中的任何代码都没有使用它。因此,如果当我去运行测试时,我的环境中没有"覆盖率",如果我的包不需要,我就不希望"覆盖率"安装到环境中。
如果使用setuptools
,则可以使用setup
方法的tests_require
关键字参数指定测试依赖关系。
from setuptools import setup
setup(
name='your-package-name',
version='1.0.0',
author='me',
author_email='me@mybasement.com',
install_requires=['Pygments>=1.4'],
tests_require=['nose'],
packages=[
'your_package_name',
],
)
当您运行python setup.py test
时,这将检查nose
,并使用pip
将其安装到当前活动的virtualenv
(如果还不可用)。
请注意,如果使用distribute.core.setup
(test
命令也不可用),则会忽略此参数。