是否有可能让distutils运行python模块依赖性分析(并可能安装缺少的模块)而不实际安装python模块?我想象一个命令如下:
./setup.py check-dependencies
将报告目标系统上是否缺少任何相关模块。
答案 0 :(得分:5)
Python包装中的依赖性是一个令人困惑的主题。很长一段时间,唯一的标准是PEP 314,它定义了requires
函数的provides
,obsoletes
和distutils.core.setup
参数。用于这些参数的元素是Python模块名称,例如provides=['xml', 'xml.utils']
。 PEP对标准库依赖关系不太清楚(我是否必须依赖于Python> = 2.5或者我是否需要'xml'
?)并且事实证明,没有使用这些的工具领域(甚至不是自己的)。
然后是setuptools。它介绍了使用项目名称而不是 modules 的其他类型的依赖项,例如,您可以拥有setup(..., install_requires=['PyXML', 'Pylons'], tests_require=['nose'])
,这非常有用:人们发布软件PyPI使用唯一的项目名称,您可以在设置脚本中使用这些相同的名称来依赖它们,使用easy_install或pip可以安装这些依赖项,模块,脚本等等。
当几年前再次开始使用distutils时,社区标准化了一些setuptools的依赖关系概念,以生成PEP 345,现在在distutils2中实现,旨在取代distutils和setuptools。
总结一下:
- 您的安装脚本中可能存在distutils样式的模块级依赖项,这些依赖项是无用的
- 您可能有setuptools样式的项目级deps,由基于setuptools的工具使用
- 您可以在setup.cfg
文件中使用符合PEP 345标准的项目级别deps,这些文件由distutils2使用
所以,让我们回答你的问题,你需要告诉我们你有哪种。对于所有实际问题,不应该使用distutils风格的模块deps,因此它留下了setuptools项目deps或新的PEP 345风格的那些,它们仍然是新的并且还没有普及。 distutils2有一个用于setuptools的compat层,因此可以使用它来从基于setuptools的setup.py
脚本中获取所需的信息。
与打包工具无关,还有一个工具可以扫描您的代码以找到您正在使用的模块:它是标准库中的模块查找器模块,它不是很熟知或使用,从悲伤状态判断它的代码。此工具不会告诉您使用的模块是来自stdlib还是第三方项目,并且它无法告诉您在setup.py
或setup.cfg
文件中使用的项目名称。 / p>
HTH
答案 1 :(得分:3)
我认为你能得到的最接近的是:
setup.py install -v -n
表示以详细(-n
)模式运行干运行(-v
)。
您也可以使用distuitls.dep_util模块,但它不能作为setup.py
的选项。
HTH!
答案 2 :(得分:0)
distutils.dep_util关注文件依赖性(即如果somefile.c比somefile.o更新,则somefile.o需要重新编译),而不是项目依赖性。 [希望将此添加为对其他回复的评论,但显然添加评论按钮会添加答案吗?]