programing

상위 디렉터리에서 파일을 가져오시겠습니까?

minimums 2023. 8. 6. 09:56
반응형

상위 디렉터리에서 파일을 가져오시겠습니까?

디렉토리 구조는 다음과 같습니다.

application
    tests
        main.py
    main.py

application/main.py 에는 일부 기능이 포함되어 있습니다.

tests/main.py 에는 이러한 기능에 대한 내 테스트가 포함되어 있지만 최상위 수준인 main.py 을 가져올 수 없습니다.다음 오류가 발생합니다.

ImportError: Import by filename is not supported.

다음 구문을 사용하여 가져오려고 합니다.

import main

내가 뭘 잘못하고 있는 거지?

스크립트를 보다 쉽게 이동할 수 있도록 하려면 상위 디렉토리를 자동으로 찾는 것이 좋습니다.

import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# import ../db.py
import db

경로에 응용 프로그램 dir를 추가해야 합니다.

import sys
sys.path.append("/path/to/dir")
from app import object

또는 셸에서:

setenv PATH $PATH:"path/to/dir"

창을 사용하는 경우:에서 경로에 변수를 추가하는 중입니다.

또는 명령줄에서:

set PATH=%PATH%;C:\path\to\dir

사이의 차이에 주의해 주십시오.PYTHONPATH,PATH,sys.path.

파티에 8년 늦었지만 여전히 여기에 있는 대부분의 다른 답변은 여전히 불행하게도 정확하지 않습니다. 불완전한 레나트 레게브로(및 브렌 반)를 제외하고 있습니다.미래의 독자들의 이익을 위해 - OP는 무엇보다도, 다음을 추가해야 합니다.__init__.py에 있는 파일

root
    application
        __init__.py
        main.py
        tests
            __init__.py
            main.py

그러면:

$ cd root
$ python -m application.tests.main # note no .py

또는

$ cd application
$ python -m tests.main

패키지 내부에서 스크립트를 직접 실행하는 것은 안티패턴입니다. 올바른 방법은 다음과 같습니다.-m루트 패키지의 상위 디렉터리에서 전환 - 이렇게 하면 모든 패키지가 검색되고 상대/절대 가져오기가 예상대로 작동합니다.

무엇보다도, 당신은 당신의 디렉토리를 패키지로 만들어야 합니다.__init__.py파일:

application
    tests
        __init__.py
        main.py
    __init__.py
    main.py

그러면 당신은 위의 디렉토리가 켜져 있는지 확인해야 합니다.sys.path응용프로그램을 패키지에 입력하여 설치하거나 올바른 폴더에서 작업을 실행하는 등 다양한 방법이 있습니다.

그러면 당신의 수입품이 작동할 것입니다.

상위/자매 디렉터리에서 항목을 가져올 수 없습니다.시스템 경로의 디렉터리, 현재 디렉터리 또는 패키지 내의 하위 디렉터리에서만 항목을 가져올 수 있습니다.당신이 없기 때문에.__init__.py파일은 패키지를 형성하지 않으며 시스템 경로에 파일을 배치해야만 가져올 수 있습니다.

상위 디렉터리의 다른 하위 디렉터리에 있는 파일을 가져오려면 다음과 같은 방법을 사용하십시오.

sys.path.append(os.path.abspath('../other_sub_dir'))
import filename_without_py_extension

편집: 닫는 브래킷이 없습니다.

python .에는 동일한 디렉토리에 대해 존재합니다. 부모 디렉토리가 부모 디렉토리에서 파일을 가져올 경우 사용할 수 있습니다.

from ... 파일 이름 가져오기(.py 확장자 없음)

언급URL : https://stackoverflow.com/questions/16780014/import-file-from-parent-directory

반응형