2010-01-29 4 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 스크립트 또는 기존 스크립트에 postinstall 옵션을 추가하고 사용자에게이를 실행하도록 알릴 수 있습니다. 그렇지 않으면 bdist_rpm 또는 다른 bdist 명령 중 하나를 사용하여 해당 플랫폼에 대한 설치 프로그램을 빌드해야합니다.

0

@ pjeby의 답변을 확장하면 설치 명령을 확장하여 사용자 정의 사후 설치 단계를 추가 할 수도 있습니다. 그러나 이는 소스 (즉, setup.py 실행)에서 설치할 때만 작동하며 RPM과 MSI와 같은 다른 설치 관리자는 변경 사항을 자동으로 무시합니다.

편집 : 일부 인터넷 검색 후이 발견은, 당신이 하지가 직접 심볼릭 링크를 만들려고 해봐야 할 것 같습니다 : 나는이 게시물은 몇 살 알고 http://docs.python.org/2/install/index.html#alternate-installation

4

을하지만 난 업데이 트를 제공하고 싶었다 그 post-processing 코드는 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

내 블로그 게시물에 대한 링크가 죽었 음을 알리는 메시지입니다. 귀하의 게시물을 편집하여 링크를 다시 활성화 시켰습니다. 당신이 유용하다고 느꼈기 때문에 기쁩니다. – plamut