실행 파일을 코드 어딘가에 호출하는 패키지 (예 : 써드 파티 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
...
첫째,'.tar.gz' 배포판이나 그 사용되지 않는'.egg' 배포판 중 하나를 생성하고 설치하고 있습니까? 어떤 시점에서는 어떤 아카이브 형식이 운영 체제에서 어떤 파일 특성을 보존하는지에 대한 질문이 포함될 수 있습니다. :) –
'scripts' 키워드를 사용하여 설치하면 올바른 모드를 얻을 수 있습니다 (* 및 *는 적절한'bin /'디렉토리에 설치됩니다). – larsks
@larsks : 내 경우, 실행 파일은 타사에서 제공 한 파일입니다. 이 스크립트는이 파일을 감싸는 래퍼로 사용됩니다. 귀하의 의견은 실제로 내 문제를 해결합니다. 그러나 그럼에도 불구하고이 질문은 여전히 흥미 롭습니다. 설치 후 패키지 *에 포함 된 파일에 대해 어떤 것을 실행 하시겠습니까? – exhuma