개발/Python

[파이썬] 스크립트를 실행하려고 할 때 "ImportError: No module named"

MinorMan 2022. 10. 6. 01:28
반응형

<질문>

무엇보다도 파이썬 스크립트를 시작하는 스크립트를 실행하려고 합니다. ImportError: No module named ... 그러나 ipython을 시작하고 인터프리터를 통해 동일한 방식으로 동일한 모듈을 가져오면 모듈이 허용됩니다.

무슨 일이 일어나고 있으며 어떻게 고칠 수 있습니까? 파이썬이 PYTHONPATH를 사용하는 방법을 이해하려고 노력했지만 완전히 혼란스럽습니다. 도움을 주시면 대단히 감사하겠습니다.


<답변1>

이 문제는 명령줄 IPython 인터프리터가 현재 경로를 사용하는 방식과 별도의 프로세스가 사용하는 방식으로 인해 발생합니다. (IPython 노트북, 외부 프로세스 등). IPython은 sys.path뿐만 아니라 현재 작업 디렉토리에서도 가져올 모듈을 찾습니다. 명령줄에서 인터프리터를 시작할 때 현재 작업 중인 디렉터리는 ipython을 시작한 디렉터리와 동일합니다.

import os
os.getcwd() 

이것이 사실임을 알게 될 것입니다.

그러나 ipython 노트북을 사용하고 있다고 가정해 보겠습니다.os.getcwd() 현재 작업 디렉토리는 대신 ipython_notebook_config.py 파일에서 노트북이 작동하도록 지시한 폴더입니다(일반적으로c.NotebookManager.notebook_dir 환경).

해결책은 파이썬 인터프리터에 모듈 경로를 제공하는 것입니다. 가장 간단한 해결책은 해당 경로를 sys.path 목록에 추가하는 것입니다. 노트북에서 먼저 다음을 시도하십시오.

import sys
sys.path.append('my/path/to/module/folder')

import module_of_interest

그래도 문제가 해결되지 않으면 가져오기 경로와 관련이 없는 다른 문제가 있는 것이므로 문제에 대한 추가 정보를 제공해야 합니다.

이 문제를 해결하는 더 나은(더 영구적인) 방법은 다음을 설정하는 것입니다.PYTHONPATH, 인터프리터에 파이썬 패키지/모듈을 찾는 추가 디렉토리를 제공합니다. PYTHONPATH를 전역 변수로 편집하거나 설정하는 것은 OS에 따라 다르며 여기에서 자세히 설명합니다.Unix 또는Windows.


<답변2>

이름으로 빈 파이썬 파일을 만드십시오.__init__.py python 프로젝트를 실행하는 동안 오류를 표시하는 폴더 아래.


<답변3>

둘 다 동일한 통역사를 사용하고 있는지 확인하십시오. 이것은 우분투에서 나에게 일어났습니다.

$ ipython3 -c 'import sys; print(sys.version)'
3.4.2 (default, Jun 19 2015, 11:34:49) \n[GCC 4.9.1]

$ python3 -c 'import sys; print(sys.version)'
3.3.0 (default, Nov 27 2012, 12:11:06) \n[GCC 4.6.3]

그리고sys.path 두 통역사는 달랐다. 이 문제를 해결하기 위해 Python 3.3을 제거했습니다.


<답변4>

주된 이유는 Python과 IPython의 sys.paths가 다르기 때문입니다.

참조하십시오lucypark link, 솔루션은 제 경우에 작동합니다. 다음으로 opencv를 설치할 때 발생합니다.

conda install opencv

그리고 iPython에서 가져오기 오류가 발생했습니다. 이 문제를 해결하는 세 단계가 있습니다.

import cv2
ImportError: ...

1. 다음 명령을 사용하여 Python 및 iPython에서 경로 확인

import sys
sys.path

Python 및 Jupyter와 다른 결과를 찾을 수 있습니다. 두 번째 단계, 그냥 사용sys.path.append 시도 및 오류로 누락된 경로를 수정합니다.

2. 임시 해결책

아이파이썬에서:

import sys
sys.path.append('/home/osboxes/miniconda2/lib/python2.7/site-packages')
import cv2

그만큼ImportError:.. 문제 해결

3. 영구 솔루션

iPython 프로필을 만들고 초기 추가를 설정합니다.

bash 셸에서:

ipython profile create
... CHECK the path prompted , and edit the prompted config file like my case
vi /home/osboxes/.ipython/profile_default/ipython_kernel_config.py

vi에서 파일에 다음을 추가합니다.

c.InteractiveShellApp.exec_lines = [
 'import sys; sys.path.append("/home/osboxes/miniconda2/lib/python2.7/site-packages")'
]

완료


<답변5>

행위sys.path.append('my-path-to-module-folder') 작동하지만 모듈을 사용할 때마다 IPython에서 이 작업을 수행하지 않으려면 다음을 추가할 수 있습니다.export PYTHONPATH="my-path-to-module-folder:$PYTHONPATH" 너의 ~에게~/.bash_profile 파일.


<답변6>

이것이 내가 고친 방법입니다.

import os
import sys
module_path = os.path.abspath(os.getcwd() + '\\..')
if module_path not in sys.path:
    sys.path.append(module_path)

<답변7>

ipython을 설치하기 전에 easy_install을 통해 모듈을 설치했습니다. 말하다sudo easy_install mechanize.

ipython을 설치한 후 ipython이 모듈을 인식하도록 easy_install을 다시 실행해야 했습니다.


<답변8>

명령줄에서 실행하는 경우 파이썬 인터프리터가 모듈을 찾을 경로를 인식하지 못하는 경우가 있습니다.

다음은 내 프로젝트의 디렉토리 구조입니다.

/project/apps/..
/project/tests/..

나는 아래 명령을 실행하고 있었다 :

>> cd project

>> python tests/my_test.py

위의 명령을 실행 한 후 오류가 발생했습니다.

no module named lib

lib는 my_test.py에서 가져왔습니다.

나는 sys.path를 인쇄하고 내가 작업하고 있는 프로젝트의 경로를 sys.path 목록에서 사용할 수 없다는 것을 알아냈습니다.

내 스크립트 시작 부분에 아래 코드를 추가했습니다.my_test.py .

import sys
import os

module_path = os.path.abspath(os.getcwd())    

if module_path not in sys.path:       

    sys.path.append(module_path)

나는 그것이 그것을 해결하는 좋은 방법인지 확실하지 않지만 네, 그것은 저에게 효과적이었습니다.


<답변9>

이 문제에 대한 해결책이 여기에 광범위하게 문서화되어 있음을 발견했습니다.

https://jakevdp.github.io/blog/2017/12/05/installing-python-packages-from-jupyter/

기본적으로 다음과 같은 셸 명령을 실행하여 Jupyter 환경 내에 패키지를 설치해야 합니다.

!{sys.executable} -m pip install numpy

권위 있는 전체 답변을 보려면 위의 링크를 확인하십시오.


<답변10>

이러한 종류의 오류는 대부분 python 버전 충돌로 인해 발생합니다. 예를 들어 애플리케이션이 python 3에서만 실행되고 python 2도 있는 경우 사용할 버전을 지정하는 것이 좋습니다. 예를 들어 사용

python3 .....

대신에

python

<답변11>

비슷한 문제가 발생하여 전화하여 수정했습니다.python3 대신에python, 내 모듈은 Python3.5에 있었습니다.


<답변12>

이 불일치의 또 다른 원인을 찾았습니다.

ipython을 virtualenvs에 로컬로 그리고 일반적으로 설치했습니다. 내 문제는 ipython으로 새로 만든 virtualenv 내부에서 virtualenv의 python 및 ipython과 다른 버전(2.7.x 대 3.5.x)인 시스템 ipython이 선택되어 재미가 뒤따랐다는 것입니다.

바이너리가 포함될 무언가를 설치할 때마다 수행하는 것이 현명한 일이라고 생각합니다.yourvirtualenv/bin 즉시 실행하는 것입니다rehash 또는 올바른 python/ipython이 선택되도록 사용 중인 셸에 대해 유사합니다. (적합한 항목이 있는지 확인해야 합니다.pip 설치 후 후크...)


<답변13>

스크립팅 없는 솔루션:

  1. Spyder -> 도구 -> PYTHONPATH 관리자 열기
  2. "경로 추가"를 클릭하여 Python 경로를 추가합니다. 예: 'C:\Users\User\AppData\Local\Programs\Python\Python37\Lib\site-packages'
  3. "동기화..."를 클릭하여 다른 프로그램(예: Jupyter Notebook)이 2단계에서 설정한 pythonpaths를 사용하도록 허용합니다.
  4. 열려 있는 경우 Jupyter를 다시 시작합니다.

<답변14>

이것은 아마도시스템에 설치된 다른 Python 버전으로 인해 발생, 즉.파이썬2 또는파이썬3.

실행 명령$ pip --version 그리고$ pip3 --version 확인하기 위해 에서 이다파이썬 3배. 예를 들어 아래와 같은 버전 정보가 표시되어야 합니다.

pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

그런 다음 실행example.py 아래 명령으로 스크립트

$ python3 example.py

<답변15>

디렉토리에서 나에게 일어난 일utils. 이 디렉토리를 다음과 같이 가져오려고 했습니다.

from utils import somefile

utils 는 이미 파이썬의 패키지입니다. 디렉토리 이름을 다른 이름으로 변경하면 정상적으로 작동합니다.


<답변16>

이 답변은 다음과 같은 경우 이 질문에 적용됩니다.

  1. 코드를 변경하고 싶지 않습니다.
  2. PYTHONPATH를 영구적으로 변경하고 싶지 않습니다.

Temporarily modify PYTHONPATH

아래 경로는 상대적일 수 있습니다.

PYTHONPATH=/path/to/dir python script.py

<답변17>

import sys
sys.path.append('/Users/{user}/Library/Python/3.7/lib/python/site-packages')
import ta

<답변18>

누군가 다음을 사용하여 이 문제를 겪는다면conda MSVS 코드의 Jupyter Notebook을 사용하는 경우 솔루션은 올바른 커널을 사용하고 있는지 확인하는 것입니다. 커널은 인터페이스의 오른쪽 상단 모서리에 있는 상자에 있으며 다음과 같습니다.

enter image description here

내 응용 프로그램 경로와도 일치하는 Python 버전을 가리켰습니다. 문제가 해결되었습니다!


<답변19>

이 문제는 다른 버전 관리로 인해 발생합니다. 컴퓨터에 설치된 Python이 이라는 폴더에 설치된 경우path_to_lib/python3.6 하지만 당신의 노트북은Python 3 - 이름의 간격이 중요합니다!

해결 방법은?

새 jupyter 노트북을 생성할 때 동일한 버전의 Python을 선택하기만 하면 됩니다(공백에 주의하세요!). 첨부된 이미지를 참조하세요.

Choose correct Python versioning


<답변20>

이것이 나를 위해 일한 것입니다. 방금 노트북 내부의 작업 디렉토리를 변경했습니다.

import os

os.chdir("my/path/to/module")
os.getcwd() 

<답변21>

Jupyter Lab 설정과 관련하여 유사한 문제가 있습니다. 이 문제는 Jupyter Lab 로그인을 열 때 확인하여 해결했습니다. 이것은 가상 환경(pipenv)이 Jupyter Lab을 찾을 수 없음을 알려주므로 공유 버전(Python의 이전 설치에서)을 사용했습니다.

저는 requirements.txt를 만들고 이 새로운 환경에 Jupyter Lab을 설치하지 않았다는 것을 발견했습니다. 설치하면 가져오기 오류가 해결되었습니다.


<답변22>

제거하다pathlib 다시 설치하십시오. 에서 pathlib를 삭제하십시오.sitepackages pip 명령을 사용하여 pathlib 패키지를 다시 설치합니다.

pip install pathlib
반응형