Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用SetupTools/distributed in setup.py生成的非脚本_Python_Distutils_Easy Install - Fatal编程技术网

Python 使用SetupTools/distributed in setup.py生成的非脚本

Python 使用SetupTools/distributed in setup.py生成的非脚本,python,distutils,easy-install,Python,Distutils,Easy Install,当我为正在构建的Python包运行setup.py install时,我试图获取一个未生成的脚本 我已经阅读了distutils文档,但找不到关于如何实现这一点的清晰示例 Mercurial在某些方面通过导入安装脚本来实现这一点: from distutils.command.install_scripts import install_scripts 然后继续替换hg脚本中的一些内容。此hg可执行文件最终被用于覆盖使用以下内容的默认行为: #!/Users/alfredo/python/fo

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

我已经阅读了distutils文档,但找不到关于如何实现这一点的清晰示例

Mercurial在某些方面通过导入
安装脚本来实现这一点:

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_资源导入我的
foo
包,而是 以我正在使用的脚本结束。我知道为什么这是自动生成的,但仍然希望 走另一条路

这是我正在使用的base 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 = "",   

)

IIRC,使用
--外部管理的单一版本
参数应该可以随心所欲。

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

即使他们的
setup.py
做了很多事情,但在没有pkg_资源链接的情况下,它实际上不会干扰脚本的正确安装

那有什么区别呢

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

在我的例子中,这种不同的安装脚本的方式意味着脚本
foo
将被复制到egg位置,并通过导入pkg_资源和该版本链接的
foo
脚本进行链接

这不是我想要的,我找不到任何关于它的文档。然而,很明显,他们这样做是为了提供一种稍后卸载的方式

所以当心!如果你真的想走我的路,如果你想卸载这些东西,你会遇到问题


在Distribute没有为我提供自定义脚本中要复制的内容的方法之前,我必须切换回常规的
setuptools

,这是setup.py的标志,但我的目标是在setup.py中处理此问题,而不是不要。系统管理员和打包程序会杀了你。Mercurial完美地处理了这个问题。如果它对他们来说同样完美,为什么不呢?我绝对鄙视北大资源部处理事情的方式