syspath에 파이썬 모듈을 추가하는 방법? TestFolder

다음과 같은 파일 구조가 있습니다.

Folder
   Common
      foo1.py
   TestFolder
      foo2.py

foo2.py 및 에 가져오고 싶습니다 foo1.py. 시도했지만 우분투에서는 작동하지 않습니다.

sys.path.append(os.path.abspath('../../'))
from Common import foo1.py


답변

파이썬이 모듈을 찾는 방법

엄밀히 말하면, 모듈 은 단일 python 파일이며, 패키지 는 python 파일을 포함하는 폴더이며, 이름이 (비어있을 수 있음) 파일과 함께 __init__.pypython에게 모듈을 가져올 패키지임을 알려줍니다. 두 경우 모두 모듈은 .py확장이 필요 하지만 가져 오기는 수행하지 않고 수행됩니다 (아래 추가 참조).

기본적으로 Python은에서 모듈과 패키지를 찾습니다 $PYTHONPATH.

$ PYTHONPATH에 무엇이 포함되어 있는지 확인하려면 python (3)에서 다음 코드를 실행하십시오.

import sys
print(sys.path)

디렉토리를 추가하는 방법

때때로

파이썬 파일 내에서 파이썬 응용 프로그램 또는 스크립트의 헤드 섹션에 다음 줄을 추가하여 때때로 경로를 기본 경로에 추가 할 수 있습니다.

import sys
sys.path.insert(0, "/path/to/your/package_or_module")

예를 들면 다음과 같습니다.

폴더 : /home/myname/pythonfiles가 있고 module_1.py해당 디렉토리에 있는 파일을 가져 오려면 이 코드를 head 섹션에 추가하십시오.

import sys
sys.path.insert(0, "/home/myname/pythonfiles")

그리고 간단히 다음과 같이 파일 module_1.py을 가져올 수 있습니다 .

import module_1

패키지를 만들고 패키지에서 모듈을 가져 오려면 모듈을 $PYTHONPATH포함 하는 폴더를 (비어있을 수 있음) 파일과 함께 폴더를 만들어야합니다__init__.py

예를 들면 다음과 같습니다.

에서 호출 my_package된 패키지 (폴더) 에서 가져 오려면 예제 1과 같이에 경로를 /home/myname/pythonfiles추가하고 /home/myname/pythonfiles다음 $PYTHONPATH과 같이 module_2.py간단히 패키지 폴더 내에서 호출 된 모듈을 가져 오십시오 .

from <packagename> import module_2

$PYTHONPATH영구적으로 디렉토리 추가 :

~/.profile파일에 다음 줄을 추가 하십시오.

export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add

하위 디렉토리

패키지 내에서 하위 디렉토리는 그렇게 포함되지 않습니다. 디렉토리를 “체인”해야합니다. module_3.py폴더 subfolder안의 폴더 내 에서 모듈을 가져 오려면 packagename:

import packagename.subfolder.module_3

패키지의 모든 하위 폴더에는 자체 __init__.py파일이 포함되어 있습니다.

모듈이 스크립트 또는 애플리케이션과 동일한 디렉토리에있는 경우

스크립트 나 응용 프로그램과 같은 디렉토리에 있으면 모듈에 대한 경로를 삽입 할 필요가 없으며 자동으로 추가됩니다.

예:

script.pyand가 포함 된 폴더가 있으면 module.py간단히 다음 과 같이 모듈을 가져올 수 있습니다.

import module

답변

상대 가져 오기를 사용하는 올바른 방법은 다음과 같습니다.

from ..Common import foo1

또한 __init__.py모든 폴더에 a 가 필요합니다 .


답변

주의 :이 답변은 최신 버전의 python 3에서는 구식이지만 이전 버전에서는 여기에 있습니다. 자세한 내용은 의견을 읽고 https://www.python.org/dev/peps/pep-0420/


기본적으로 syspath에 추가하려는 파이썬 코드가있는 모든 폴더에는 __init__.py 파일이 필요합니다. 이 __init__.py 파일은 비어있을 수 있습니다.


답변