Python 스크립트를 실행하려고 할 때“ImportError : No module named”


144

파이썬 스크립트를 시작하는 스크립트를 실행하려고합니다. ImportError : No module named ...라는 메시지가 표시되지만 ipython을 시작하고 인터프리터를 통해 동일한 방식으로 동일한 모듈을 가져 오면 모듈이 허용됩니다.

무슨 일이 일어나고 어떻게 해결할 수 있습니까? 파이썬이 PYTHONPATH를 어떻게 사용하는지 이해하려고 노력했지만 완전히 혼란 스럽습니다. 어떤 도움이라도 대단히 감사하겠습니다.


4
더 많은 정보를 제공해야합니다. "스크립트 실행"이라고 말할 때 쉘 스크립트를 의미합니까? 가져올 수없는 모듈은 무엇입니까? 해당 모듈은 어디에 있습니까? 스크립트는 어디에 있습니까?
BrenBarn

2
"어떻게 진행되고 있는지"에 대한 명확한 대답을 원한다면, -v옵션으로 파이썬을 시작 하면 파이썬이 가져온 모듈을 찾는 곳이 어디인지 알 수 있습니다.
FatalError

무엇을 가져 오려고합니까? 두 개의 파이썬 스크립트가 같은 디렉토리에 있습니까?
pynovice

2
실행중인 코드, 스택 추적의 전체 텍스트 및 오류를 발생시키기 위해 수행 한 정확한 단계를 알려주십시오. 정확한 문제가 무엇인지 알지 못하면 지원하기가 다소 어렵습니다.
MattDMo

5
질문이 처음 제기 된 후 4 년이 지나도 많은 사용자 경험에 문제가 있다고 생각합니다.
CodeOcelot

답변:


183

이 문제는 명령 행 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 를 설정하여 인터프리터에게 파이썬 패키지 / 모듈에 대한 추가 디렉토리를 제공합니다. PYTHONPATH를 전역 변수로 편집하거나 설정하는 것은 운영 체제에 따라 다르며 여기에서 Unix 또는 Windows에 대해 자세히 설명합니다 .


1
PSA : 당신이 jupyter 노트북에서이 오류가 있기 때문에이 SO 질문에왔다면, 다음, 아래 참조 stackoverflow.com/a/27944947/127971 불행하게도, 문제는 하나의 답에 대한 특정 충분하지 않습니다.
마이클

@michael의 대답은 일반적인 경우에 파이썬 모듈을 가져 오는 것에 관한 것입니다. dunder init.py 파일은 인터프리터가 디렉토리에서 가져올 모듈의 노트북을 검색 할 때 필요합니다. 노트북 인터프리터 작업 디렉토리 및 PYTHONPATH 설정에 대한 위의 답변이 정확합니다.
BoltzmannBrain

나는 그 질문의 말로 인해 여러 가지 정답이있을 것이라고 말했습니다. 이 답변 정확 하지 않다는 것을 의미 하지는 않습니다 . 그러나 jupyter-notebook을 사용하는 경우 파일을 터치하면됩니다 __init_.py. ... 그리고 그것들이 정확하더라도 (정확합니까?) 수정 하거나 호출 하고 싶지 않습니다 . 나는 코드에 수십 개의 디렉토리가 있고 경로에 모든 디렉토리를 추가하지 않을 것입니다. 또는 디렉토리가 하나 인 경우에도 다른 사용자가 jupyter 구성 파일을 기대합니다. PYTHONPATHsys.path.append
마이클

16

__init__.pypython 프로젝트를 실행하는 동안 폴더 아래 에 이름 으로 빈 python 파일을 작성하면 오류가 표시됩니다.


1
' init.py '는 '_ init_ .py' 를 의미 합니까? _ init_ .py를 빈 파일로 만들었고 나를 위해 일했습니다. 고마워 그러나 이것이 왜 필요한가? ipython 노트북과 동일한 디렉토리에 Python 스크립트가 있고 가져 오기가 제대로 작동하기 전에.
Eduardo Reis

3
실제로 init .py는 파이썬이 해당 위치에 포함 된 패키지가 있음을 나타 내기 위해 사용됩니다. 그런 다음 그 아래에서 생성 한 모든 하위 모듈 만 찾을 수 있습니다. ' init .py'를 만들지 않으면 파이썬에 패키지가 있다는 것을 모릅니다. 예를 들어 "Myfolder.Mypackage import Mymodules"에서 init .py를 시작 하여 여기에 패키지가 있음을 알리기 위해 python을 표시 해야 합니다. 그렇지 않으면 그것은 모른다.
Mohideen bin Mohammed

1
네, 정답입니다. 그것은 파이썬 2.7에서 필요하지만, 3
Agape Gal'lo

이것은 나를 위해 파이썬 3의 문제를 해결했습니다.
Rick은 Monica

ipynb 파일의 하위 디렉토리에 파이썬 소스가있는 jupyter 노트북을 사용하여 나에게도 문제가 해결되었습니다. 예를 들면, foo.ipynb사용 bar/baz.py, 빈 추가 bar/__init__.py하는 노트북을 사용할 수 있도록 파일을from bar.baz import MyClass
마이클

13

둘 다 동일한 통역사를 사용하고 있는지 확인하십시오. 우분투에서 나에게 일어난 일 :

$ 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을 제거했습니다.


파이썬과 관련된 것들을 설치하기 위해 miniconda를 사용 했는데이 문제도 정확하게 발생했습니다. 번들로 제공된 우분투 파이썬 2.7은 미니 콘다 파이썬 2.7과 다릅니다. 이 답변을 통해 문제를 해결할 수있었습니다
bph

4
이것은 내 문제였다. 파이썬 2.7.11로 업그레이드했지만 iPython 대화식 쉘은 여전히 ​​2.7.5를 사용하고 있습니다. pip install --upgrade ipython최신 버전을 얻기 위해 실행 해야했고 기본적으로 2.7.11이 자동으로 사용되었습니다.
Abundnce10

내 IPython은 7.4.0이지만 그러한 Python 버전은 전혀 없습니다.
aderchox

@aderchox ipython에서 이것을 실행하여 인터프리터 버전을 얻으십시오 :import sys; sys.version
z0r

7

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

lucypark link를 참조하십시오 . 솔루션이 작동합니다. opencv를 설치하면 발생합니다.

conda install opencv

iPython에서 가져 오기 오류가 발생했습니다.이 문제를 해결하려면 다음 세 단계가 있습니다.

import cv2
ImportError: ...

1. 다음 명령으로 Python 및 iPython의 경로를 확인하십시오.

import sys
sys.path

Python과 Jupyter와는 다른 결과가 나타납니다. 두 번째 단계 sys.path.append 는 시도하여 오류로 누락 된 경로를 수정하는 데 사용 하십시오.

2. 임시 솔루션

iPython에서 :

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")'
]

끝난


'ipython profile create'.... 예! 이것은 모든 파일 (yuk)의 시작 부분에 지저분한 sys.path 문을 사용하지 않고 환경 PATH 및 PYTHONPATH ...에서 읽지 않는 jupyter 노트북을 해결하는 유일한 (영구적) 솔루션입니다. @jesse 감사합니다.
JohnL_10

6

이렇게 sys.path.append('my-path-to-module-folder')작동하지만 IPython에 모듈을 사용할 때마다이 작업을 수행하는 것을 방지하기 위해, 당신은 추가 할 수 있습니다 export PYTHONPATH="my-path-to-module-folder:$PYTHONPATH"당신에 ~/.bash_profile파일.


2

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

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


2

비슷한 문제 가 있었지만 python3대신 대신 호출하여 문제를 해결했습니다 python. 내 모듈은 Python3.5였습니다.


2

커맨드 라인에서 실행하면 파이썬 인터프리터가 모듈을 찾을 경로를 알지 못하는 경우가 있습니다.

아래는 내 프로젝트의 디렉토리 구조입니다.

/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)

그것이 그것을 해결하는 좋은 방법인지 확실하지 않지만 그래도 나를 위해 일했습니다.


항상 같은 위치에서 스크립트를 실행하면 작동합니다. 그렇지 않으면 os.getcwd()스크립트 파일이있는 디렉토리가 아니라 스크립트가 실행 된 디렉토리를 가져 오기 때문에 문제 가 발생 합니다.
Nathan Arthur

1

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

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


0

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

ipython을 로컬 및 가상 환경에 모두 설치했습니다. 내 문제는 ipython으로 새로 만든 virtualenv 내에서 ipython 시스템을 선택했는데 virtualenv의 python 및 ipython과 다른 버전 (2.7.x 대 3.5.x)과는 다른 큰 문제가 발생했습니다.

바이너리가 포함될 무언가를 설치할 때마다 올바른 파이썬 / ipython이 선택되도록 사용중인 쉘에 대해 yourvirtualenv/bin즉시 실행 rehash하거나 유사한 것이 현명하다고 생각합니다 . ( pip설치 후 후크 가 적합한 지 확인해야합니다 ...)


0

스크립팅없는 솔루션 :

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

0

이것은 아마도 시스템에 설치된 다른 파이썬 버전 , 즉 python2 또는 python3 때문일 수 있습니다 .

명령을 실행 $ 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

0

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

from utils import somefile

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


0

이런 종류의 오류는 대부분 파이썬 버전 충돌로 인해 발생합니다. 예를 들어, 응용 프로그램이 python 3에서만 실행되고 python 2도있는 경우 사용할 버전을 지정하는 것이 좋습니다. 예를 들어

python3 .....

대신에

python

0

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

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

PYTHONPATH를 임시로 수정

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

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

0

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


-1

제거했다 pathlib가 다시 설치하십시오. sitepackagespip 명령을 사용하여 폴더 에서 pathlib를 삭제하고 pathlib 패키지를 다시 설치하십시오.

pip install pathlib
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.