단일 응용 프로그램이 포함 된 Django 프로젝트에서 작업하고 있습니다. 응용 프로그램은 GPL에 따라 배포되므로 프로젝트와 별도로 개발하고 싶습니다. 응용 프로그램을 사용하는 개인 사이트입니다. 프로젝트와 앱 모두에 도메인 이름을 기반으로 한 패키지 구조를 사용하려고 시도하고 있는데 문제가 발생합니다.패키지 구조의 일부를 공유하는 여러 디렉토리에 여러 Python 모듈 만들기
$HOME/django-sites/mydomain
$HOME/django-apps/mydomain/cms
그리고 내 PYTHONPATH :
여기에 (적절한 __init__.py 파일) 내 파일 구조의
$HOME/django-sites:$HOME/django-apps
나는 파일 시스템에있는 모든 디렉토리에서 파이썬 인터프리터 (불 경우) 사이트에서는 클래스를 가져올 수 있지만 응용 프로그램에서는 가져올 수 없습니다. 만약 내가 PYTHONPATH (애플 리케이션을 처음으로 다음 사이트)에서 두 항목의 순서를 반대로하면 앱에서 가져올 수 있지만 사이트에서는 가져올 수 없습니다.
파이썬이 패키지 이름의 첫 번째 부분을 포함하는 PYTHONPATH의 첫 번째 항목에서 가져 오기를 시도하는 것처럼 보입니다. 그 맞습니까? 이 예상되는 동작입니까? 그렇다면 PYTHONPATH에 관계없이 domain/app1, domain/app2와 같은 패키지 구조의 모듈 만 동일한 디렉토리 구조에있을 수 있습니다.
내가 사이트 이름을 바꿀 수 있기 때문에 쇼 스토퍼가 아니지만 기대했던 것과 많이 다릅니다. 파이썬 튜토리얼에는 __path__에 대한 언급이 있지만 사용법은 모르겠다.
패키지는 __path__이라는 특수 속성을 하나 이상 지원한다. 이것은 파일의 코드가 실행되기 전에 패키지의 __init__.py를 담고있는 디렉토리의 이름을 포함하는리스트로 초기화됩니다. 이 변수는 수정할 수 있습니다. 그렇게하면 패키지에 포함 된 모듈 및 하위 패키지에 대한 향후 검색에 영향을 미칩니다.
이 기능은 자주 필요하지는 않지만 패키지에서 발견되는 모듈 집합을 확장하는 데 사용할 수 있습니다.
누구도이 문제를 알고 있습니까? 이 함수를 예상대로 만들기 위해 __path__로 할 수있는 것이 있습니까?
어쨌든해야 할 일은 제 3 자 앱이 파이썬 가져 오기 네임 스페이스 (예 :'from cms import models')의 맨 위에 있어야합니다. 모든 프로젝트 관련 앱은 프로젝트 모델 내에 있어야합니다 (예 :'[프로젝트] .apps. [appname] 가져 오기 모델') – SmileyChris
그래서 재배포 가능한 여러 타사 응용 프로그램을 개발하려면 완전히 필요합니다. 독특한 패키지 구조? –