强制 `setup.py` 使用 setuptools
我正在使用这段代码:
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
使用了 distutils 而不是 setuptools:--single-version-externally-managed 这个选项在 distutils 中是无法识别的。
我该如何强制 setup.py
使用 setuptools 呢?
1 个回答
2
你写的内容基本上就是pip在做的事情。根据你写的代码,你会使用setuptools的setup
函数,因为你是从setuptools导入的。setuptools覆盖了Distutils的setup
函数,在它的__init__.py
文件里。所以,不管setup.py脚本是否导入了distutils,这都没关系。setuptools总是会优先使用...
如果你在运行命令时遇到问题,可以尝试在执行之前先编译文件。用exec(compile(...))
而不是execfile(...)
。
针对@jknair的回答... 我也不建议使用ez_setup.py,因为这会导致代码重复,可能会出现意想不到的行为,而且在打包分发时通常会被排除(这会让像pip这样的工具在运行setup.py时遇到ImportError,变得很麻烦)。