Python의 상대 경로에서 가져 오기
내 클라이언트 코드 용 폴더, 내 서버 코드 용 폴더 및 이들간에 공유되는 코드 용 폴더가 있습니다.
Proj/
Client/
Client.py
Server/
Server.py
Common/
__init__.py
Common.py
Server.py와 Client.py에서 Common.py를 어떻게 가져 옵니까?
2014 년 11 월 수정 (3 년 후) :
Python 2.6 및 3.x는 적절한 상대 가져 오기를 지원하므로 해킹을 피할 수 있습니다. 이 방법을 사용 하면 절대 가져 오기가 아닌 상대 가져 오기를 받고 있음을 알 수 있습니다 . '..'는 내 위에있는 디렉토리로 이동한다는 의미입니다.
from ..Common import Common
주의 사항으로, 이것은 패키지 외부 에서 Python을 모듈로 실행하는 경우에만 작동 합니다. 예를 들면 :
python -m Proj
원래 해키 방식
이 방법은 실제로 패키지를 '설치'하지 않는 일부 상황에서 여전히 일반적으로 사용됩니다. 예를 들어 Django 사용자에게 인기가 있습니다.
Common /을 sys.path에 추가 할 수 있습니다 (파이썬이 가져 오기 위해 보는 경로 목록) :
import sys, os
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'Common'))
import Common
os.path.dirname(__file__)
현재 파이썬 파일이있는 디렉토리를 제공하고 디렉토리 'Common /'으로 이동하여 모듈을 'Common'으로 가져옵니다.
상대 가져 오기를하지 마십시오.
에서 PEP8 :
패키지 내 수입에 대한 상대적 수입은 매우 권장되지 않습니다.
모든 코드를 하나의 슈퍼 패키지 (예 : "myapp")에 넣고 클라이언트, 서버 및 공통 코드에 대한 하위 패키지를 사용합니다.
업데이트 : " Python 2.6 및 3.x는 적절한 상대 가져 오기를 지원합니다 (...) ". 자세한 내용은 Dave의 답변 을 참조하십시오.
상대 수입을하는 것은 절대적으로 OK! 내가하는 일은 다음과 같습니다.
#first change the cwd to the script path
scriptPath = os.path.realpath(os.path.dirname(sys.argv[0]))
os.chdir(scriptPath)
#append the relative location you want to import from
sys.path.append("../common")
#import your module stored in '../common'
import common.py
재밌고 방금 만난 동일한 문제이며 다음과 같은 방식으로이 작업을 수행합니다.
linux 명령과 결합 ln
하면 훨씬 간단하게 만들 수 있습니다.
1. cd Proj/Client
2. ln -s ../Common ./
3. cd Proj/Server
4. ln -s ../Common ./
이제 some_stuff
file :에서 file : Proj/Common/Common.py
로 가져 오려면 다음 Proj/Client/Client.py
과 같이하십시오.
# in Proj/Client/Client.py
from Common.Common import some_stuff
그리고, 같은가 적용 Proj/Server
또한 작동, setup.py
공정, 동일 질문은 여기서 논의 , 그것은 도움이되기를 바랍니다!
The default import method is already "relative", from the PYTHONPATH. The PYTHONPATH is by default, to some system libraries along with the folder of the original source file. If you run with -m to run a module, the current directory gets added to the PYTHONPATH. So if the entry point of your program is inside of Proj, then using import Common.Common
should work inside both Server.py and Client.py.
Don't do a relative import. It won't work how you want it to.
참고URL : https://stackoverflow.com/questions/7505988/importing-from-a-relative-path-in-python
'development' 카테고리의 다른 글
내 개발자 계정 멤버십이 만료되면 내 앱은 어떻게 되나요? (0) | 2020.09.21 |
---|---|
두 가지 크기의 텍스트를 세로로 정렬하는 방법은 무엇입니까? (0) | 2020.09.21 |
스프링 컨트롤러 매핑으로 URL 매개 변수를 어떻게 수신합니까? (0) | 2020.09.21 |
Matplotlib는 산점도 점을 선으로 연결-Python (0) | 2020.09.21 |
새 행에 대해서만 기본 NOW ()로 타임 스탬프 열 추가 (0) | 2020.09.21 |