2011-11-07 3 views
4

실행 파일을 코드 어딘가에 호출하는 패키지 (예 : 써드 파티 c/java-program)가 있다고 가정 해 봅시다. 추가로 가정 해 봅시다. 응용 프로그램은 패키지와 함께 묶을만큼 작거나 작습니다. 예 : 단일 실행 파일 (cfoo).`setup.py`를 사용하여 패키지를 설치 한 후`chmod`를 실행하십시오.

내가 가서, 다음과 같은 구조로 파일을 저장할 수 :

. 
|-- foo 
| |-- __init__.py 
| |-- __init__.pyc 
| |-- core.py 
| |-- corebin 
| | `-- cfoo 
| `-- foomain.py 
`-- setup.py 

을 그리고 다음과 같이 setup.py를 준비하기 :

from setuptools import setup 

setup(
    name='foo', 
    version='1.0', 
    packages=['foo'], 
    scripts=['foo/foomain.py'], 
    package_data={'foo': ['corebin/*']}, 
    zip_safe=False 
) 

이 나를 제대로 패키지를 설치할 수 있습니다. 나중에, 패키지 코드에서 나는이 작업을 수행 할 수 있습니다 :

from subprocess import call 

import pkg_resources as res 

def main(): 
    fn = res.resource_filename('foo', 'corebin/cfoo') 
    print "Resource located at:", fn 
    call([fn]) 

불행하게도, 실행 파일이 설치 될 없이 실행 플래그가 설정. 원본 파일이 설정 되더라도. setup.py 스크립트의 끝에 chmod 호출을 추가하는 것은 적절한 설치 경로를 먼저 파악해야하므로 쉽지 않습니다. resource_filename으로 시도했지만 로컬 파일을 반환했습니다 ("사전 설치"에서와 같이).

어떻게이 문제를 해결할 수 있습니까? 또한 마음에 virtualenv ...

+0

첫째,'.tar.gz' 배포판이나 그 사용되지 않는'.egg' 배포판 중 하나를 생성하고 설치하고 있습니까? 어떤 시점에서는 어떤 아카이브 형식이 운영 체제에서 어떤 파일 특성을 보존하는지에 대한 질문이 포함될 수 있습니다. :) –

+0

'scripts' 키워드를 사용하여 설치하면 올바른 모드를 얻을 수 있습니다 (* 및 *는 적절한'bin /'디렉토리에 설치됩니다). – larsks

+0

@larsks : 내 경우, 실행 파일은 타사에서 제공 한 파일입니다. 이 스크립트는이 파일을 감싸는 래퍼로 사용됩니다. 귀하의 의견은 실제로 내 문제를 해결합니다. 그러나 그럼에도 불구하고이 질문은 여전히 ​​흥미 롭습니다. 설치 후 패키지 *에 포함 된 파일에 대해 어떤 것을 실행 하시겠습니까? – exhuma

답변

2

로 내가 대답에 내 의견을 홍보 해요 : (당신이 scripts 키워드를 사용하여 설치하는 경우

, 그것은 올바른 모드를 얻을 것이다 적절한 bin에 설치 얻을/예배 규칙서).

설치 후 패키지에 포함 된 파일에 대해 어떻게 수행합니까?

This question은 동일한 상황을 처리하는 것처럼 보일 수 있으며 합리적인 답이있는 것으로 보입니다.

+0

위대한 ... 감사합니다 ... :) – exhuma

관련 문제