【问题标题】:Non-generated script with SetupTools/Distribute in setup.pysetup.py 中带有 SetupTools/Distribute 的非生成脚本
【发布时间】:2010-12-21 02:20:22
【问题描述】:

当我为我正在构建的 Python 包运行 setup.py install 时,我试图获取一个未生成的脚本。

我已阅读 distutils 文档,但找不到有关如何完成此操作的明确示例。

Mercurial 在某种程度上通过导入 install_scripts 来做到这一点:

from distutils.command.install_scripts import install_scripts

然后继续在他们的hg 脚本中替换一些东西。这个hg 可执行文件最终被用来覆盖使用类似这样的默认行为:

#!/Users/alfredo/python/foo/bin/python  
# EASY-INSTALL-SCRIPT: 'foo==0.0.1','foo'
__requires__ = 'foo==0.0.1'
import pkg_resources
pkg_resources.run_script('foo==0.0.1', 'foo')

我正在尝试最终使用 pkg_resources 导入我的 foo 包,而是 最终得到我正在使用的脚本。我知道为什么这是自动生成的并且仍然想要 走另一条路。

这是我正在使用的基本 setup.py 的副本:

import distribute_setup
distribute_setup.use_setuptools()
from setuptools import setup

tests_require = ['pytest']

setup(
name = "foo",
version = "0.0.1",
packages = ['_foo'],

scripts = ['foo'],
zip_safe = False,
package_data = {'': ['distribute_setup.py']},
author = "Alfredo Deza",
author_email = "alfredodeza [at] gmail [dot] com",
description = "",
long_description = """\
Foo
""",
classifiers=[
    'Development Status :: 4 - Beta',
    'Intended Audience :: Developers',
    'License :: OSI Approved :: MIT License',
    'Topic :: Software Development :: Build Tools',
    'Programming Language :: Python :: 2.5',
    'Programming Language :: Python :: 2.6',
    'Programming Language :: Python :: 2.7',
  ],

license = "MIT",
keywords = "",
url = "",   

)

【问题讨论】:

    标签: python distutils easy-install


    【解决方案1】:

    经过几天的挖掘......事实证明,Mercurial 并没有做任何事情特别

    尽管他们的setup.py 做了很多事情,但它实际上并没有做任何事情来干扰正确安装脚本而无需 pkg_resources 链接到它。

    那有什么区别呢?

    不同之处在于我使用的是 Distribute,它的工作方式是用自己的(而不是 setuptools)覆盖 setup 模块,因此它有自己不同的安装行为。

    在我的例子中,安装脚本的不同方式意味着脚本foo将被复制到egg位置并通过foo脚本链接,该脚本导入pkg_resources并链接到那个版本。

    不是我想要的,我找不到任何在上面分发文档。但是,很明显他们这样做是为了在以后提供一种卸载方式。

    所以要小心!如果你真的想走我的路,如果你想卸载东西,你会遇到问题。

    在 Distribute 无法为我提供自定义脚本中要复制的内容之前,我将不得不切换回常规 setuptools

    【讨论】:

      【解决方案2】:

      IIRC,使用 --single-version-externally-managed 参数 when installing 应该随心所欲。

      【讨论】:

      • 这是 setup.py 的一个标志,但我的目标是在 setup.py 中处理这个
      • 不要。系统管理员和打包者会杀了你。
      • Mercurial 完美地处理了这个问题。如果它对他们来说是完美的,为什么不呢?我绝对鄙视 pkg_resources 处理事情的方式
      猜你喜欢
      • 1970-01-01
      • 2012-07-13
      • 2010-12-16
      • 2019-03-30
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      相关资源
      最近更新 更多