2009-09-18 4 views
7

내 setup.py가 Python 패키지 (예 : init.d 스크립트 설치, 디렉토리 및 파일 작성 등)를 설치하는 것 외에도 일부 사용자 정의 작업을 수행하기를 원합니다. distutils/setuptools 클래스를 사용자 정의하여 사용자 정의 할 수 있음을 알고 있습니다. 행위. 내가 겪고있는 문제는 패키지 디렉토리로 가서 "python setup.py install"을 할 때 모든 것이 작동하지만 "easy_install mypackage.tar.gz"를 실행하면 사용자 정의 클래스가 실행되지 않는 것 같습니다. 여기 내 setup.py 파일 (테스트하기 위해 같은 디렉토리에 빈 myfoobar.py 파일을 만듭니다)입니다 :easy_install을 setup.py에서 커스텀 커맨드를 실행시키는 방법?

import setuptools 
from setuptools.command import install as _install 

class install(_install.install): 
    def initialize_options(self): 
     _install.install.initialize_options(self) 

    def finalize_options(self): 
     _install.install.finalize_options(self) 

    def run(self): 
     # Why is this never executed when tarball installed with easy_install? 
     # It does work with: python setup.py install 
     import pdb;pdb.set_trace() 
     _install.install.run(self) 

setuptools.setup(
    name = 'myfoobar', 
    version = '0.1', 
    platforms = ['any'], 
    description = 'Test package', 
    author = 'Someone', 
    py_modules = ['myfoobar'], 
    cmdclass = {'install': install}, 
) 

같은 일이 내가 "설정"과의 distutils에서 "설치"를 가져올 경우에도 발생합니다. easy_install이 내 사용자 정의 클래스를 실행할 수있는 방법에 대한 아이디어가 있습니까?

분명히하기 위해 Buildout이나 Paver와 같은 추가 기능은 사용하고 싶지 않습니다.

답변

4

할 수 없습니다. Enthought에는 이것을 지원하는 setuptools의 사용자 정의 버전이 있지만 그렇지 않은 경우 6 월 이후 토론중인 위시리스트 항목으로 버그 추적기에 있습니다.

그러나 시스템을 트릭하는 방법이 있으며 고려해 볼 수 있습니다. 한 가지 방법은 가장 중요한 모듈을 가져 오는 것입니다. 가장 중요한 모듈은 패키지를 사용할 때 항상 처음으로 가져 오는 모듈로, 처음 호출 할 때 설치 후 작업을 수행합니다. 그런 다음 자신을 정리해야하며 관리자가 패키지를 설치하고 첫 번째 사용자가 관리자가 아니기 때문에 라이브러리에 쓸 수없는 경우를 고려해야합니다.

최악의 경우 패키지를 사용하는 사용자를 위해 ~/.mypackage 디렉토리를 만들고 새 사용자마다 postinstall을 한 번 다시 실행해야합니다. 모듈을 가져올 때마다 ~/.mypackage가 있는지 확인합니다. 없으면 postinstall을 실행하여 만듭니다. 그곳에 있으면 postinstall을 건너 뜁니다.

+0

내가 원했던 대답은 아니지만 주어진 수있는 최선을 추측합니다. 그래서 나는 대답으로 그것을 수여하고있다. 감사! –

5

Paver은 setuptools를 다음 단계로 가져와 사용자 지정 작업을 작성할 수 있습니다. 일반적인 setup.py 파일을 확장하고 Paver 환경을 부트 스트랩하는 간단한 방법을 제공합니다.

+0

나는 Buildout과 같은 뭔가를 쓸 수 있다는 것을 알고 있습니다. 또는 Paver가 이것을하는 것처럼 보이지만, 이것은 제가 묻는 것이 아닙니다. 사람들이 "easy_install package_name"으로 설치하기를 원한다는 PyPI 패키지를 상상해보십시오. –

+3

Paver는 easy_install과'python setup.py install'이 평소대로 작동 할 수 있도록 사용될 수 있습니다. 사실, 설치 프로그램을 올바르게 설치 한 경우 Paver를 설치하지 않아도됩니다. 참조 : http://packages.python.org/Paver/getting_started.html#but-people-are-used-to-setup-py –