【问题标题】:Migration from distribute to setuptools从分发迁移到 setuptools
【发布时间】: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


    【解决方案1】:

    看来问题是 setuptools 不喜欢安装到 /usr/local/lib/...

    我强迫 pip 把它放到/usr/lib/... 中:

    sudo pip install --install-option="--prefix=/usr/lib/python2.7/dist-packages" \
      setuptools==3.8
    

    setup.py 之后安装干净。

    【讨论】:

      猜你喜欢
      • 2011-06-26
      • 2017-07-12
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多