내 클라이언트 코드 용 폴더, 내 서버 코드 용 폴더 및 이들간에 공유되는 코드 용 폴더가 있습니다.
Proj/
Client/
Client.py
Server/
Server.py
Common/
__init__.py
Common.py
Server.py와 Client.py에서 Common.py를 어떻게 가져 옵니까?
답변:
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'으로 가져옵니다.
from ...myfile
이동../../myfile
재밌고 방금 만난 동일한 문제였으며 다음과 같은 방식으로이 작업을 수행합니다.
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
공정,
동일 질문은 여기서 논의 , 그것은 도움이되기를 바랍니다!
if __name__ == "__main__":
'줄 뒤의 클라이언트와 서버 끝에 몇 가지 코드를 추가한다고 상상해보십시오 . 즉, 독립 실행 형 스크립트로 사용할 수 있기를 원합니다. 제대로하는 방법? 지원해야 할 완벽하게 일반적인 사용 사례라고 생각합니다. 왜 낙담합니까?
상대 수입을하는 것은 절대적으로 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
기본 가져 오기 방법은 PYTHONPATH에서 이미 "상대적"입니다. PYTHONPATH는 기본적으로 원본 소스 파일의 폴더와 함께 일부 시스템 라이브러리에 있습니다. -m을 사용하여 모듈을 실행하면 현재 디렉토리가 PYTHONPATH에 추가됩니다. 따라서 프로그램의 진입 점이 Proj 내부에 있으면 사용 import Common.Common
은 Server.py와 Client.py 모두에서 작동합니다.
상대적 가져 오기를하지 마십시오. 원하는대로 작동하지 않습니다.