2010-01-29 41 views
9

作爲我項目設置過程的一部分,我需要將其中一個包符號鏈接到指定的目錄,以便init.d腳本可以找到它。有沒有辦法將這個作爲後處理命令添加到setup()?我甚至願意創建另一個創建鏈接的文件,並將其作爲「運行這些」的一部分kwarg列表(如果存在這種選項)的一部分傳遞給setup()使用distribute/setuptools創建符號鏈接(或運行腳本)?

setup(
    ... 
    packages = find_packages('src'), 
    package_dir = {'': 'src'}, 
    install_requires = ..., 
    data_files = [('/etc/init.d', ['scripts/foo'])], 
    ... 
) 

foo該腳本期望被符號鏈接到別處目錄從src/包中的一個(例如不單純是對PYTHONPATH)。有沒有辦法實現這一點?

回答

4

目前,只有特定於平臺的軟件包管理工具(例如RPM,DEB,win32的安裝程序)必須運行後的安裝步驟的能力:Distutils的,setuptools的,等不直接支持這一點。 (除了允許你創建RPM,Windows Installer的程度等)

所以,要做到這一點沒有特定於平臺的安裝程序最簡單的方法,就是要創建自己的後腳本,或者爲你的現有腳本添加一個postinstall選項,並告訴用戶運行它。否則,您將不得不使用bdist_rpm或其他bdist命令之一來爲相應的平臺構建安裝程序。對@ pjeby的回答

0

擴展,還可以擴展安裝命令添加自己的自定義安裝後的步驟。然而從源代碼安裝時(即運行setup.py)和其他安裝RPM一樣只會工作和MSI會悄悄地忽略更改。

編輯:一些谷歌上搜索後發現這一點,看來你應該試圖自行創建符號鏈接:http://docs.python.org/2/install/index.html#alternate-installation

4

我知道這個帖子是幾個歲,但我想提供一個更新在setup.py中可以使用後處理代碼。長話短說,你要重寫的setuptools的安裝功能,但從此之後,你可以添加任何你想要的代碼,比如複製該MANIFEST.in拒絕複製符號鏈接。採取自Peter Lamut的solution

from setuptools.command.install import install 

class CustomInstallCommand(install): 
    """Customized setuptools install command - prints a friendly greeting.""" 
    def run(self): 
     print "Hello, developer, how are you? :)" 
     install.run(self) 
     #post-processing code 
setup(
    ... 
    cmdclass={ 
     'install': CustomInstallCommand, 
    }, 
    ... 
) 
+1

Helio公司的Guilherme通知我,鏈接到我的博客文章已經死了。我編輯了你的帖子,讓鏈接重新開始。順便說一句,我很高興你發現它很有用。 – plamut 2016-02-06 18:36:55