문제

배포 된 파이썬 응용 프로그램을 배치하는 방법을 생각하고 있습니다.

  1. /usr/bin/에 위치한 실행 가능한 스크립트는
  2. 현재 사이트 패키지 디렉토리가있는 곳에 설치된 라이브러리.

이제 현재 소스에 다음과 같은 디렉토리 구조가 있습니다.

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 그리고 당신이 있으면 실행 파일을 거기에 두십시오. 그들에게주지 마십시오 .pyPython 소스 파일이더라도 확장. 프로젝트의 다른 곳에서 정의 된 주요 기능을 가져오고 호출하는 것을 제외하고는 코드를 넣지 마십시오.
  • 프로젝트가 단일 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, 예를 들어, 인기있는 패키지 이름입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top