공유 패키지로 파이썬 응용 프로그램을 배포합니다
-
11-07-2019 - |
문제
배포 된 파이썬 응용 프로그램을 배치하는 방법을 생각하고 있습니다.
- /usr/bin/에 위치한 실행 가능한 스크립트는
- 현재 사이트 패키지 디렉토리가있는 곳에 설치된 라이브러리.
이제 현재 소스에 다음과 같은 디렉토리 구조가 있습니다.
foo.py
foo/
__init__.py
...
내가하는 것이 가장 좋은 방법이 아니라고 생각합니다. 개발 중에 모든 것이 예상대로 작동하지만, 배포 될 때 Foo.py의 "Foom import fooobject"코드는 Foo.py 자체를 가져 오려고 시도하는 것처럼 보입니다. 이것이 제가 찾고있는 행동이 아닙니다.
따라서 문제는 이와 같은 상황을 조정하는 표준 관행은 무엇입니까? 내가 생각할 수있는 것 중 하나는 설치할 때 foo.py를 Foo로 바꾸는 것입니다.
문제의 또 다른 부분은 그것이 명명 도전이라는 것입니다. 아마도 실행 가능한 스크립트 foo-bin.py를 호출할까요?
해결책
이 기사 꽤 좋고, 당신에게 좋은 방법을 보여줍니다. 두 번째 항목 하다 귀하의 질문에 대한 답변.
부끄러운 복사 페이스트 :
파이썬 프로젝트의 파일 시스템 구조
~에 의해 JP Calderone
하다:
- 프로젝트와 관련된 디렉토리의 이름을 지정하십시오. 예를 들어, 프로젝트가 "Twisted"라는 경우 소스 파일의 최상위 디렉토리를 지정하십시오.
Twisted
. 릴리스를 수행하면 버전 번호 접미사를 포함해야합니다.Twisted-2.5
.- 디렉토리를 만듭니다
Twisted/bin
그리고 당신이 있으면 실행 파일을 거기에 두십시오. 그들에게주지 마십시오.py
Python 소스 파일이더라도 확장. 프로젝트의 다른 곳에서 정의 된 주요 기능을 가져오고 호출하는 것을 제외하고는 코드를 넣지 마십시오.- 프로젝트가 단일 Python 소스 파일로 표현할 수있는 경우 디렉토리에 넣고 프로젝트와 관련된 이름을 지정하십시오. 예를 들어,
Twisted/twisted.py
. 여러 소스 파일이 필요한 경우 대신 패키지를 만듭니다 (Twisted/twisted/
비어Twisted/twisted/__init__.py
) 그리고 소스 파일을 배치하십시오. 예를 들어,Twisted/twisted/internet.py
.- 단위 테스트를 패키지의 하위 패키지에 넣습니다 (참고 - 위의 단일 Python 소스 파일 옵션이 트릭임을 의미합니다. 단위 테스트를 위해 항상 하나 이상의 다른 파일이 필요합니다). 예를 들어,
Twisted/twisted/test/
. 물론 패키지로 만드십시오Twisted/twisted/test/__init__.py
. 같은 파일에 테스트를 배치합니다Twisted/twisted/test/test_internet.py
.- 추가하다
Twisted/README
그리고Twisted/setup.py
기분이 좋으면 소프트웨어를 각각 설명하고 설치합니다.하지 않다:
- 소스를 호출하는 디렉토리에 넣으십시오
src
또는lib
. 이것은 설치하지 않고 실행하기가 어렵습니다.- 테스트를 파이썬 패키지 외부에 넣으십시오. 따라서 설치된 버전에 대해 테스트를 실행하기가 어렵습니다.
- 만있는 패키지를 만듭니다
__init__.py
그런 다음 모든 코드를 넣으십시오__init__.py
. 패키지 대신 모듈을 만들면 더 간단합니다.- 마법의 해킹을 시도하여 Python이 사용자가 가져 오는 디렉토리를 가져 오는 디렉토리를 추가 경로에 추가하지 않고 모듈이나 패키지를 가져올 수 있도록 마법의 해킹을 시도하십시오.
PYTHONPATH
또는 다른 메커니즘). 모든 사례를 올바르게 처리하지는 않으며 소프트웨어가 자신의 환경에서 작동하지 않으면 사용자가 화를 낼 것입니다.
다른 팁
distutils 모듈, 패키지 및 스크립트 설치를 지원합니다. Distutils를 만드는 경우 setup.py
참조 foo
패키지로 foo.py
그러므로 대본으로 foo.py
설치해야합니다 /usr/local/bin
또는 적절한 스크립트 설치 경로가 대상 OS에 있든 foo
패키지는 다음에 설치해야합니다 site_packages
예배 규칙서.
실행 파일 만 호출해야합니다 foo
, 아니다 foo.py
, 그런 다음 FOO를 가져 오려는 시도는 그것을 사용하지 않습니다.
제대로 명명하는 경우 : 이것은 초록에서 대답하기가 어렵습니다. 우리는 그것이 구체적으로 무엇을하는지 알아야합니다. 예를 들어, 구성 및 컨트롤이 구성되면 -Config 또는 CTL 호출이 적절할 수 있습니다. 라이브러리의 쉘 API 인 경우 라이브러리와 동일한 이름을 가져야합니다.
CLI 모듈은 하나의 것입니다. 지원하는 패키지는 또 다른 것입니다. 이름을 하나와 혼동하지 마십시오 foo
(파일로 foo.py
) 그리고 패키지 foo
(디렉토리에서 foo
파일로 __init__.py
).
당신은 두 가지 이름이 있습니다 foo
: 모듈과 패키지. 다른 이름을 지정하고 싶습니까? foo
? 수업? 기능? 변수?
Foo 모듈 또는 Foo 패키지의 독특한 이름을 선택하십시오. foolib
, 예를 들어, 인기있는 패키지 이름입니다.