복붙노트

[PYTHON] 파이썬에서 상대 경로에서 가져 오기

PYTHON

파이썬에서 상대 경로에서 가져 오기

클라이언트 코드 용 폴더, 서버 코드 용 폴더 및 이들 사이에 공유되는 코드 용 폴더가 있습니다.

Proj/
    Client/
        Client.py
    Server/
        Server.py
    Common/
        __init__.py
        Common.py

Server.py와 Client.py에서 어떻게 Common.py를 가져 옵니까?

해결법

  1. ==============================

    1.상대 가져 오기를 수행하지 마십시오.

    상대 가져 오기를 수행하지 마십시오.

    PEP8에서 :

    모든 코드를 하나의 슈퍼 패키지 (예 : "myapp")에 넣고 클라이언트, 서버 및 공용 코드에 하위 패키지를 사용합니다.

    최신 정보: "Python 2.6 및 3.x는 적절한 상대 가져 오기 (...)를 지원합니다." 자세한 내용은 Dave의 답변을 참조하십시오.

  2. ==============================

    2.파이썬 2.6과 3.x는 상대적인 임포트를 지원합니다. 여기서 당신은 해킹을 피할 수 있습니다. 이 방법을 사용하면 절대 가져 오기가 아닌 상대적인 가져 오기를 얻게됩니다. '..'의미는 위의 디렉토리로 이동합니다.

    파이썬 2.6과 3.x는 상대적인 임포트를 지원합니다. 여기서 당신은 해킹을 피할 수 있습니다. 이 방법을 사용하면 절대 가져 오기가 아닌 상대적인 가져 오기를 얻게됩니다. '..'의미는 위의 디렉토리로 이동합니다.

    from ..Common import Common
    

    주의해야 할 점은 파이썬을 모듈 외부에서 패키지를 실행하는 경우에만 작동합니다. 예 :

    python -m Proj
    

    Common /을 sys.path에 추가 할 수 있습니다 (Python이 가져 오는 경로 목록).

    import sys, os
    sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'Common'))
    import Common
    

    os.path.dirname (__ file__)은 현재 파이썬 파일이있는 디렉토리를 제공하고 디렉토리를 'Common /'디렉토리로 이동하고 모듈을 'Common'으로 임포트합니다.

  3. ==============================

    3.재밌는 것, 방금 만난 동일한 문제, 그리고 나는 다음과 같은 방식으로이 작품을 얻는다.

    재밌는 것, 방금 만난 동일한 문제, 그리고 나는 다음과 같은 방식으로이 작품을 얻는다.

    linux 명령과 결합하면, 우리는 훨씬 더 똑똑해질 수 있습니다.

    1. cd Proj/Client
    2. ln -s ../Common ./
    
    3. cd Proj/Server
    4. ln -s ../Common ./
    

    그리고 이제 some_stuff 파일을 Proj / Common / Common.py 파일에서 Proj / Client / Client.py 파일로 가져 오려면 다음과 같이하십시오.

    # in Proj/Client/Client.py
    from Common.Common import some_stuff
    

    그리고 Proj / Server에도 동일하게 적용됩니다. setup.py 프로세스에서도 작동합니다. 여기서 논의 된 것과 같은 질문이 도움이되기를 바랍니다!

  4. ==============================

    4.기본 가져 오기 방법은 PYTHONPATH에서 이미 "상대적"입니다. PYTHONPATH는 기본적으로 원본 파일의 폴더와 함께 일부 시스템 라이브러리에 있습니다. 모듈을 실행하기 위해 -m을 사용하면 현재 디렉토리가 PYTHONPATH에 추가됩니다. 따라서 프로그램의 진입 점이 Proj 내부에 있으면 import Common.Common을 사용하여 Server.py와 Client.py 모두에서 작업해야합니다.

    기본 가져 오기 방법은 PYTHONPATH에서 이미 "상대적"입니다. PYTHONPATH는 기본적으로 원본 파일의 폴더와 함께 일부 시스템 라이브러리에 있습니다. 모듈을 실행하기 위해 -m을 사용하면 현재 디렉토리가 PYTHONPATH에 추가됩니다. 따라서 프로그램의 진입 점이 Proj 내부에 있으면 import Common.Common을 사용하여 Server.py와 Client.py 모두에서 작업해야합니다.

    상대 가져 오기를 수행하지 마십시오. 그것은 당신이 그것을 원하는 방식으로 작동하지 않습니다.

  5. ==============================

    5.상대 수입을하는 것은 절대적으로 좋습니다! 여기에 제가하는 일이 조금 있습니다.

    상대 수입을하는 것은 절대적으로 좋습니다! 여기에 제가하는 일이 조금 있습니다.

    #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
    
  6. from https://stackoverflow.com/questions/7505988/importing-from-a-relative-path-in-python by cc-by-sa and MIT license