【发布时间】:2014-07-25 21:05:45
【问题描述】:
我正在尝试将安装良好的项目转换为基于 setuptools 的较新安装程序。由于某种原因,我根本无法运行 setuptools。当我运行 setup.py 时,我从 distutils 收到有关不受支持的选项的错误,这些选项是 setuptools 提供的所有扩展选项。我不明白为什么 setuptools 没有正确处理这些问题。这是在运行 Python 2.7 的 Debian Wheezy 系统上。
我创建了一个简单的测试用例来演示这个问题。它是一个独立的脚本,我想作为一个带有可执行包装脚本的实用程序安装:
foo.py
#!/usr/bin/python
def main():
print 'Foo main() ran'
if __name__ == '__main__':
main()
setup.py
from setuptools import setup
setup(name='foo',
version='1.0',
py_modules = ['foo'],
entry_points = {
'console_scripts': ['foo = foo:main'] # setuptools extension
},
include_package_data = True # another setuptools extension
)
Debian 软件包存档中的 setuptools 版本是 0.6.24,它早于与分发的合并,我更喜欢使用保留一些分发遗产的东西。我一直在用 pip 安装各种版本的 setuptools。最新的 4.0.1 无法正确安装,但从 1.4 到 3.8 的大多数都可以:
$ sudo pip install setuptools==3.8
...
$ python
Python 2.7.3 (default, Mar 13 2014, 11:03:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from setuptools import version
>>> version.__version__
'3.8'
setuptools 包/egg 放在/usr/local/lib/python2.7/dist-packages 中,这在 Debian 系统上使用 pip 时是正常的。
当我尝试使用 setup.py 安装时,出现以下错误:
$ sudo python setup.py install
/usr/lib/python2.7/distutils/dist.py:267:
UserWarning: Unknown distribution option: 'entry_points'
warnings.warn(msg)
/usr/lib/python2.7/distutils/dist.py:267:
UserWarning: Unknown distribution option: 'include_package_data'
warnings.warn(msg)
running install
running build
running build_py
running install_lib
running install_egg_info
Removing /usr/local/lib/python2.7/dist-packages/foo-1.0.egg-info
Writing /usr/local/lib/python2.7/dist-packages/foo-1.0.egg-info
Distutils 将 foo.py 安装到 /usr/local/lib/python2.7/dist-packages/ 但显然 setuptools 生成的包装脚本不存在。我本来希望 setuptools 做它的子类化/monkeypatching 事情来处理 distutils 不支持的任何事情。
我记得几年前 setuptools 很古怪,这就是我决定使用分发的原因。令人失望的是它仍然不能“正常工作”。有什么明显的我失踪了吗?我怀疑这与 Debian 使用dist-packages 目录代替site-packages 有关,但这绝不是分发的问题。
【问题讨论】:
标签: python setuptools distribute