强制`setup.py`使用setuptools

时间:2011-05-22 15:57:07

标签: python installation setuptools distutils

我正在使用此代码:

code = 'import setuptools;__file__={0!r};execfile(__file__)'.format(os.path.join(path, 'setup.py'))
args = ['install', '--single-version-externally-managed']
subprocess.check_call([sys.executable, '-c', code, args])

执行setup.py并安装软件包。当setup.py使用distutil而不是setuptools时会出现问题:distutils无法识别--single-version-external-managed。

如何强制setup.py使用setuptools?

1 个答案:

答案 0 :(得分:2)

你所写的基本上就是pip所做的。根据您编写的代码,您将使用setuptools'setup函数,因为您已从setuptools导入。 Setuptools paves over Distutils' setup function in its __init__.py.因此,如果setup.py脚本导入distutils,则不会生成。 Setuptools将永远赢得...

如果由于某种原因在运行命令时仍然存在问题。尝试在执行前编译文件。 exec(compile(...))而不是execfile(...)

回应@jknair回答...我也不鼓励使用ez_setup.py,因为它的代码重复,具有意外行为,并且在程序包分发期间经常被排除(这使得像pip这样的工具很难运行没有ImportError的setup.py。