developer tip

Python에서 "ImportError : No module named…"오류를 수정하는 방법은 무엇입니까?

optionbox 2020. 8. 15. 09:06
반응형

Python에서 "ImportError : No module named…"오류를 수정하는 방법은 무엇입니까?


이 ImportError 오류를 수정하는 올바른 방법은 무엇입니까?

다음과 같은 디렉토리 구조가 있습니다.

/home/bodacydo
/home/bodacydo/work
/home/bodacydo/work/project
/home/bodacydo/work/project/programs
/home/bodacydo/work/project/foo

그리고 나는 디렉토리에 있습니다.

/home/bodacydo/work/project

이제 입력하면

python ./programs/my_python_program.py

나는 즉시 얻는다

ImportError: No module named foo.tasks

./programs/my_python_program.py에는 다음 행 포함됩니다.

from foo.tasks import my_function

파이썬이 왜 찾지 못하는지 이해할 수 없습니다 ./foo/tasks.py. 거기에 있습니다.

Python 셸에서 수행하면 작동합니다.

python
>>> from foo.tasks import my_function

python ./programs/my_python_program.py스크립트 를 통해 호출하는 경우에만 작동하지 않습니다 .


Python은 현재 디렉터리를에 추가하지 않고 sys.path스크립트가있는 디렉터리에 추가 /home/bodacydo/work/project합니다 . sys.path또는에 추가 합니다 $PYTHONPATH.


__init__.pyfoo 디렉토리에 파일이 있습니까? 그렇지 않으면 파이썬은 foo를 파이썬 패키지로 인식하지 않습니다.

자세한 내용은 python 튜토리얼의 패키지 섹션 을 참조하십시오.


다음은 단계별 솔루션입니다.

  1. run.py에서 호출 스크립트를 추가 /home/bodacydo/work/project하고 다음과 같이 편집하십시오.

    import programs.my_python_program
    programs.my_python_program.main()
    

    ( main()에서 동등한 방법으로 대체 하십시오 my_python_program.)

  2. 이동 /home/bodacydo/work/project
  3. 운영 run.py

설명 : python 은 실행되는 스크립트 의 경로를 PYTHONPATH에 추가하므로 실행 run.py하면 /home/bodacydo/work/project. 그리고 함으로써 해결할 수 , import foo.tasks발견 될 것이다.


PYTHONPATH에 라이브러리를 추가하는 예제 솔루션입니다.

  1. ~ / .bashrc에 다음 행을 추가하거나 직접 실행하십시오.

    export PYTHONPATH="$PYTHONPATH:$HOME/.python"
    
  2. 그런 다음 필요한 라이브러리를 ~ / .python 폴더에 연결합니다.

    ln -s /home/user/work/project/foo ~/.python/
    

더 나은 설정보다 수정 PYTHONPATH사용하는 것입니다python -m module.path

이것은 올바르게 설정 sys.path[0]되고 모듈을 실행하는 더 안정적인 방법입니다.

나는이 빠른 작성자 의 다른 답변자가 언급 한 것처럼,이 문제에 대한을 이유로 이에 대한 인 python path/to/file.pypath/to의 시작 부분에 PYTHONPATH( sys.path).


내 생각에는 foo폴더가 독립 실행 형 라이브러리라는 것을 고려해야합니다 . Lib\site-packages파이썬 설치 내의 폴더로 옮기는 것을 고려할 수 있습니다 . foo.pth거기 파일을 추가하는 것을 고려할 수 있습니다 .

./programs/my_python_program.py에 다음 줄 포함되어 있기 때문에 라이브러리라는 것을 알고 있습니다 .

from foo.tasks import my_function

따라서 그것이 ./programs.NET의 형제 폴더 인지 중요하지 않습니다 ./foo. my_python_program.py다음과 같은 스크립트로 실행 되는 것은 사실입니다 .

파이썬 ./programs/my_python_program.py

참고URL : https://stackoverflow.com/questions/2325923/how-to-fix-importerror-no-module-named-error-in-python

반응형