안녕하세요 저는 python에 익숙하지 않아 제가 만든 프로그램 구조에 문제가 있다고 생각합니다.ImportErrors를 해결하기위한 구조에 대한 조언
이것은 내가 생각한 구조의 추출물입니다.
.
└── asd
├── asd.py
├── __init__.py
├── Framework
│ ├── importer.py
│ └── __init__.py
├── Library
│ ├── libraryManager.py
│ └── __init__.py
실제로 asd
에는 더 많은 패키지가 있습니다. asd.py
은 '기본'을 의미합니다. 다른 패키지에 포함 된 여러 클래스의 많은 객체를 인스턴스화합니다. 예를 들어 여러 라이브러리 객체가 있습니다. 임포터는 라이브러리 파일을 가져올 수 있습니다 (뿐만 아니라).
내 주요 결함은 다음과 같습니다. asd
의 서로 다른 인스턴스에 액세스하기 위해 다른 패키지 내의 클래스를 사용하려면 매개 변수로 기본 asd
에 대한 참조를 얻습니다.
asd.py
:
from asd.Framework.importer import importer
from asd.Library.libraryManager import libraryManager
class asd(object):
def __init__(self):
# instantiate several objects
self.nodeLibMng = libraryManager("DbNodeLibrary.txt")
self.importer = importer(self)
importer.py
:
ImportError: No module named 'asd.Framework'; 'asd' is not a package
: 이제 나는 다음과 같은 오류를 얻을 asd.py를 실행하려면
from asd.asd import asd
class importer(object):
def __init__(self, asdRef : asd):
self.asdRef = asdRef
def importNode (self,item):
# The following line shows why I want this reference construct.
self.asdRef.nodeLibMng.appendItemToLibraryDB(item)
사람들은 문제의 파일입니다
importer.py에서 테스트 코드를 실행하는 경우 이 오류를 얻을 : ImportError: Cannot import name X 같은
ImportError: cannot import name 'asd'
다른 주제 내가 원형 따라 수입을하는 것이 좋습니다.
어떻게 해결할 수 있습니까?하지만 모든 클래스가 asd
의 인스턴스와 통신 할 수있는 동작을 유지합니까?
EDIT 0 : 나는 동일한 문제가 사람을 위해
if __name__ == '__main__':
asd=asd()
당신은 당신의 경로에'asd' 아닌 * 상위 디렉토리의 *을'asd' 디렉토리가 있습니다. 따라서 'asd.py'는 디렉토리가 아닌 최상위 모듈로 발견됩니다. –
'asd.py'를 스크립트로 사용하고 있습니까? 그렇다면 그렇게하지 마십시오. 패키지 내의 단일 파일을 스크립트로 실행할 수 없으므로 경로의 최상위 디렉토리가됩니다. 스크립트 * 외부 * 패키지를 넣거나'python -m' 스위치를 사용하여 모듈을 대신 스크립트로 실행하십시오 ('__main __. py' 모듈을 가진 패키지는 그 메소드를 사용하여 실행될 수 있습니다). –
여기에 "asd"라고 불리는 것들이 너무 많습니다. –