[英]Non-generated script with SetupTools/Distribute in setup.py
當我為要構建的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 = "",
)
經過幾天的挖掘……事實證明,Mercurial並沒有做任何特別的事情。
即使他們的setup.py
做了很多事情,實際上在沒有pkg_resources鏈接的情況下,它實際上也沒有任何作用來干擾正確安裝腳本。
那有什么區別呢?
區別在於我使用的是Distribute,它的工作方式會覆蓋自己的setup
模塊(而不是setuptools),因此它具有自己的不同安裝行為。
就我而言,安裝腳本的不同方式意味着腳本foo
將被復制到egg位置,並通過導入pkg_resources並鏈接到該版本的foo
腳本進行鏈接。
這不是我想要的,我找不到關於它的任何 Distribute文檔。 但是,很明顯,他們這樣做是為了以后提供卸載方法。
所以要當心! 如果您確實想走我的路,那么如果要卸載東西,將會遇到問題。
在Distribute無法為我提供自定義腳本中要復制的內容的方式之前,我將不得不切換回常規的setuptools
IIRC 在安裝時使用--single-version-externally-managed
參數可以--single-version-externally-managed
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.