0

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

我已阅读 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 = "",   

)
4

2 回答 2

1

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

即使他们setup.py做了很多事情,它实际上并没有做任何事情来干扰正确安装脚本而没有 pkg​​_resources 链接到它。

那有什么区别呢?

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

在我的情况下,安装脚本的这种不同方式意味着脚本foo将被复制到 egg 位置并通过foo导入 pkg_resources 并链接到该版本的脚本链接。

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

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

直到 Distribute 没有为我提供自定义脚本中要复制的内容的方法,我将不得不切换回常规setuptools

于 2010-12-24T19:11:01.633 回答
0

IIRC,安装时--single-version-externally-managed使用参数应该随心所欲。

于 2010-12-24T18:43:22.830 回答