다음과 같은 파일 구조가 있습니다.
Folder
Common
foo1.py
TestFolder
foo2.py
foo2.py
및 에 가져오고 싶습니다 foo1.py
. 시도했지만 우분투에서는 작동하지 않습니다.
sys.path.append(os.path.abspath('../../'))
from Common import foo1.py
다음과 같은 파일 구조가 있습니다.
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__.py
python에게 모듈을 가져올 패키지임을 알려줍니다. 두 경우 모두 모듈은 .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.py
and가 포함 된 폴더가 있으면 module.py
간단히 다음 과 같이 모듈을 가져올 수 있습니다.
import module
printenv PYTHONPATH
아무것도 없습니까?
sys.path.append("/path/to/your/package_or_module")
또한 기본값에 경로를 추가하고 덜 혼란 스럽습니다. sys.path.insert(0,...)
어느 0
것이 첫 번째 인수인지 비교합니다 .
상대 가져 오기를 사용하는 올바른 방법은 다음과 같습니다.
from ..Common import foo1
또한 __init__.py
모든 폴더에 a 가 필요합니다 .
주의 :이 답변은 최신 버전의 python 3에서는 구식이지만 이전 버전에서는 여기에 있습니다. 자세한 내용은 의견을 읽고 https://www.python.org/dev/peps/pep-0420/
기본적으로 syspath에 추가하려는 파이썬 코드가있는 모든 폴더에는 __init__.py 파일이 필요합니다. 이 __init__.py 파일은 비어있을 수 있습니다.
python -c "from pathlib import Path; Path('ns').mkdir(); Path('ns/mod.py').write_text('''print('mod.py')'''); import ns.mod; from shutil import rmtree; rmtree('ns')"
또한 네임 스페이스 패키지 의미의 추가를 설명하는
__init__.py
폴더에 파일을? 이것은 파이썬이 패키지를 생성하고 그 패키지에서 모듈을 가져올 수있게하는 방법입니다. guide.python-distribute.org/creation.html