2017-09-10 6 views
2

awesomepkgsetup.py의 패키지가 있습니다. 사용자가 pip install awesomepkg을 실행하면 바이너리 실행 파일 awesometool을 패키지 자체와 함께 명령 줄에 설치하고 싶습니다. awesometool에 대해 다른 OS 버전을 컴파일했습니다. 폴더에 있으며 setup.py 옆에 있습니다.Python 패키지 설치 스크립트 설치 바이너리 실행 파일

그러나 좋은 방법으로 setup.py을 구성 할 수 없습니다.

  1. setup()scripts=[] 키워드를 사용 : 나는 다음 시도했다. 불행히도 "실행 파일"은 파이썬 스크립트 여야합니다.

  2. 그래서 나는 os.system('bin/awesometool')을 사용하여 파이썬 스크립트에서 이진 코드를 위임하려고합니다. 래퍼 스크립트는 pip에 의해 다른 곳으로 복사되기 때문에 실패합니다. 따라서 상대 경로 bin/awesometool이 어디에 있는지 알지 못합니다.

  3. 또 다른 잠재적 인 해결책은 data_files 키워드입니다. 그러나 어떤 이유로 인해 python setup.py bdist_wheel을 실행해도 데이터 파일이 site_packages 설치 디렉토리로 복사되지는 않습니다.

참조 : https://docs.python.org/3/distutils/setupscript.html

답변

4

난 그냥이 문제를 자신에 달렸다. 내 해결책은 세 가지였다.

  1. 프로그램을 추가했습니다. awesometool을 내 패키지 구조에 추가하여 package_data 키워드 ( package_data={'awesomepkg': ['awesometool']})를 통해 추가 할 수 있습니다. 설치 중에이 파일은 실제로 .py와 같은 폴더에 복사됩니다.

  2. 내가 대신 상대 경로, 나는 처음 awesomepkg를 가져오고 패키지의 설치 폴더의 절대 경로를 얻을 수 awesomepkg.__path__를 사용, 그러나 당신의 2 단계에 파이썬 스크립트와 유사했다. 이는 다음과 같을 것입니다 :

    import awesomepkg 
    import subprocess as sp 
    import sys 
    
    path = awesomepkg.__path__[0] 
    command = path + "/awesometool" 
    sp.call([command] + sys.argv) 
    

    또한 시스템 대신 하위 프로세스를 사용했지만 결과는 동일해야합니다.

  3. 내가 조금 정리해 그냥 말하기 setup()

+1

scripts 키워드에이 스크립트를 추가, 당신은() 파이썬 래퍼 스크립트를 만들어 설정'의'scripts'의 keyworkd에 추가 '. – konstunn

+0

문제가 생겼습니다. 바이너리 파일의 소유권 때문에 'Permission denied'오류가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? – konstunn