簡體   English   中英

在setup.py中帶有SetupTools / Distribute的非生成腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM