문제
내 디렉토리 구조가 다음과 같이 간단한 파이썬 응용 프로그램이 있습니다.
- 프로젝트/
- main.py
- config.py
- 플러그인/
- 플러그인 1
- 플러그인 2
- ...
config.py는 구성 파일 만로드하므로 구성 정보 자체가 포함되어 있지 않습니다.
이제이 프로그램을 배포하고 싶었고 SetupTools를 사용하여이를 수행 할 것이라고 생각했습니다. 사용자가 사용 해야하는 파일은 main.py이므로/usr/bin으로 명확하게 들어가고 나머지 파일은/usr/share/project로 들어갑니다.
그러나 한 가지 문제가 있습니다. 어떻게 든 main.py에게 공유 디렉토리에서 config.py를 찾으라고 말해야합니다. 그러나 SetupTools에 달려 있기 때문에 Share Directory가 정확히 어디에 있는지 확신 할 수 없습니다.
파이썬 기반 애플리케이션을 배포 할 때 가장 모범 사례는 무엇입니까?
해결책
SetUptools Python에서 도달 할 수있는 위치에 패키지를 설치하십시오. 즉, 가져올 수 있습니다.
import project
절대 수입 대신 상대 수입을 할 때 문제가 발생합니다. 당신의 경우 main.py
수입 config.py
동일한 디렉토리에 살기 때문에 작동합니다. 당신이 당신을 움직일 때 main.py
같은 다른 위치에 /usr/bin
또는 다른 위치에 있습니다 길 환경 변수, 파이썬은 가져 오려고합니다 config.py
~에서 sys.path
그리고 당신의 패키지 dir가 아닙니다. 해결책은 절대 가져 오기를 사용하는 것입니다.
from project import config
지금 main.py
"움직일 수"입니다.
내가 선호하는 또 다른 솔루션은 SetUptools.
코드를 사용하는 대신 a
if __name__ == "__main__":
# here all your beautiful code
진술, 코드를 함수에 넣습니다 (메인은 좋은 이름 일 수 있음) :
def main():
# put your code here
if __name__ == "__main__": # not needed, just in case...
main()
이제 수정하십시오 setup.py
:
setup(
# ...
entry_points = {
"console_scripts": [
# modify script_name with the name you want use from shell
# $ script_name [params]
"script_name = project.main:main",
],
}
)
그게 다야. 설치 후 SetUptools 쉘에서 호출 할 수 있고 주 기능을 호출하는 래퍼 스크립트를 만듭니다. 지금 main.py
프로젝트 디렉토리에 살 수 있으며 더 이상 이동할 필요가 없습니다. bin/
예배 규칙서. 주목하십시오 SetUptools 이 스크립트를 자동으로 넣습니다 bin/
설치 접두사에 대한 디렉토리.
es.
python setup.py install --prefix ~/.local
프로젝트 패키지를 설치하십시오
~/.local/lib/python<version>/site-packages/<package_name>
그리고 당신의 대본
~/.local/bin/<script_name>
그러니 확인하십시오 ~/.local/bin
당신에게 존재합니다 길 env.
추가 정보 : http://peak.telecommunity.com/devcenter/setuptools#automatic-script-creation