在setup.py中使用SetupTools / Distribute生成非脚本的脚本

时间:2010-12-21 02:20:22

标签: python distutils easy-install

当我为正在构建的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 = "",   

)

2 个答案:

答案 0 :(得分:1)

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

即使他们的setup.py执行了很多操作,但它实际上并没有任何干扰正确安装脚本而没有链接到pkg_resources。

那有什么不同呢?

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

就我而言,不同的安装脚本的方式意味着脚本foo将被复制到egg位置并通过导入的foo脚本链接pkg_resources和该版本的链接。

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

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

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

答案 1 :(得分:0)

IIRC,使用--single-version-externally-managed参数when installing应该可以随意使用。

相关问题