setup.py 中的条件 setup_requires 依赖项
Conditional setup_requires dependencies in setup.py
有什么方法可以告诉 pip 在不需要时跳过某些 setup_requires 依赖项吗?
在我的场景中,我在 setup.py 中将 pytest-runner 声明为设置依赖项(用于执行测试)。当我尝试安装我的包时(即:pip install my-package.tar.gz),它会下载 pytest-runner 或失败它不可用 (*)。
在setup.py我有:
...
setup_requires=['pytest-runner', 'flake8']
...
我想告诉 setup.py 只有在执行测试时才使用 pytest-runner。这可能吗?
正如@deceze 所建议的,此声明将起作用:
setup_requires=['pytest-runner', 'flake8'] if 'test' in sys.argv else []
但我不想给 setup.py 添加逻辑。
(*) 环境非常受限,这就是为什么下载依赖是一个障碍。
将其声明为 extra:
是有意义的
setup(
...,
extras_require=dict(
tests=[
'pytest-runner'
]
)
)
你专门用 pip install my-package[tests]
安装它。
作为替代方案:setup.py
是一个功能齐全的 Python 程序……如果您能以某种方式检测您的环境,您可以动态决定是否将某些依赖项添加到需求列表中。
rwt (运行 With This) 似乎是首选的方式。
它提供按需依赖解析,使包在解释器会话期间可用。
它的目标场景之一是:test runners.
安装 rwt (*) 后,您可以从执行的 pytest-runner 模块加载 setup.py 命令:
rwt pytest-runner -- setup.py test
或
python -m rwt pytest-runner -- setup.py test
(*) 您仍然必须安装一个不需要的依赖项(即:rwt),但它似乎比安装其他依赖项影响更小。
有什么方法可以告诉 pip 在不需要时跳过某些 setup_requires 依赖项吗?
在我的场景中,我在 setup.py 中将 pytest-runner 声明为设置依赖项(用于执行测试)。当我尝试安装我的包时(即:pip install my-package.tar.gz),它会下载 pytest-runner 或失败它不可用 (*)。
在setup.py我有:
...
setup_requires=['pytest-runner', 'flake8']
...
我想告诉 setup.py 只有在执行测试时才使用 pytest-runner。这可能吗?
正如@deceze 所建议的,此声明将起作用:
setup_requires=['pytest-runner', 'flake8'] if 'test' in sys.argv else []
但我不想给 setup.py 添加逻辑。
(*) 环境非常受限,这就是为什么下载依赖是一个障碍。
将其声明为 extra:
是有意义的setup(
...,
extras_require=dict(
tests=[
'pytest-runner'
]
)
)
你专门用 pip install my-package[tests]
安装它。
作为替代方案:setup.py
是一个功能齐全的 Python 程序……如果您能以某种方式检测您的环境,您可以动态决定是否将某些依赖项添加到需求列表中。
rwt (运行 With This) 似乎是首选的方式。
它提供按需依赖解析,使包在解释器会话期间可用。 它的目标场景之一是:test runners.
安装 rwt (*) 后,您可以从执行的 pytest-runner 模块加载 setup.py 命令:
rwt pytest-runner -- setup.py test
或
python -m rwt pytest-runner -- setup.py test
(*) 您仍然必须安装一个不需要的依赖项(即:rwt),但它似乎比安装其他依赖项影响更小。