Programming

Python 오류“ImportError : No module named”

procodes 2020. 2. 21. 22:33
반응형

Python 오류“ImportError : No module named”


파이썬은 로컬 디렉토리에 설치됩니다.

내 디렉토리 트리는 다음과 같습니다

(local directory)/site-packages/toolkit/interface.py

내 코드는 다음과 같습니다.

(local directory)/site-packages/toolkit/examples/mountain.py

예제를 실행하려면을 작성 python mountain.py하고 코드에 작성하십시오.

from toolkit.interface import interface

그리고 나는 오류를 얻는다 :

Traceback (most recent call last):
  File "mountain.py", line 28, in ?
    from toolkit.interface import interface
ImportError: No module named toolkit.interface

나는 이미 확인 sys.path했고 거기에 디렉토리가 /site-packages있습니다. 또한 __init__.py.bin툴킷 폴더에 파일 이 있는데 이는 파이썬에게 이것이 패키지임을 나타냅니다. 또한 __init__.py.binexamples 디렉토리에 있습니다.

파이썬이 왜 파일을 찾을 수 없는지 모르겠습니다 sys.path. 어떤 아이디어? 권한 문제 일 수 있습니까? 실행 권한이 필요합니까?


orip의 게시물에 대한 귀하의 의견을 바탕으로, 이것이 일어난 일이라고 생각합니다.

  1. __init__.py창에서 편집 했습니다.
  2. Windows 편집기는 캐리지 리턴 (Windows의 줄 끝은 CR / LF, 유닉스에서는 LF에만 해당) 또는 CTRL-Z (Windows 파일 끝)와 같이 인쇄하지 않는 것을 추가했습니다.
  3. WinSCP를 사용하여 파일을 유닉스 박스에 복사했습니다.
  4. WinSCP는 다음과 같이 생각했다. "이것은 기본 텍스트가 아닌 것을 가지고있다. 바이너리 데이터를 나타 내기 위해 .bin 확장자를 붙일 것이다."
  5. 누락 __init__.py(현재라고 함 __init__.py.bin)은 파이썬이 툴킷을 패키지로 이해하지 못한다는 것을 의미합니다.
  6. __init__.py적절한 디렉토리에 작성 하면 모든 것이 작동합니다 ...?

않습니다

(local directory)/site-packages/toolkit

__init__.py?

수입하려면 도보 당신의 디렉토리를 통해이 모든 디렉토리가 있어야합니다 __init__.py파일을.


LPTHW에서이 운동을했을 때 매우 비슷한 일이 발생했습니다. 필자가 호출 한 디렉토리에 파일이 있음을 Python이 인식하도록 할 수 없었습니다. 그러나 결국에는 작동하도록 할 수있었습니다. 내가 한 일과 내가 추천하는 것은 이것을 시도하는 것입니다.

(참고 : 초기 게시물에서 * NIX 기반 컴퓨터를 사용하고 명령 줄에서 작업을 수행한다고 가정 하므로이 조언은 그에 맞게 조정되었습니다. 우분투를 실행하기 때문에 이것이 내가 한 일입니다)

1) 디렉토리 (cd)를 파일이 있는 디렉토리 의 디렉토리로 변경하십시오. 이 경우 mountain.py파일 을 실행 하려고하고 toolkit.interface.py별도의 디렉토리에 있는 모듈 을 호출하려고합니다 . 이 경우 두 파일 모두에 대한 경로가 포함 된 디렉토리 (또는 두 파일의 경로가 공유하는 가장 가까운 디렉토리)로 이동합니다. 이 경우 toolkit디렉토리 는 어느 것입니까 ?

2) tookit디렉토리 에있을 때 명령 행에 다음 코드 행을 입력하십시오.

export PYTHONPATH=.

이는 PYTHONPATH를 "."로 설정합니다. 이는 기본적으로 PYTHONPATH가 현재있는 디렉토리 내에서 (그리고 현재 디렉토리하위 디렉토리 분기 에서 더 많은 파일을 찾습니다) 것을 의미합니다 . 그래서 당신의 현재 디렉토리에 보이지만, 모든 디렉토리에서하지 않습니다 ) 현재 디렉토리.

3) 위 단계에서 PYTHONPATH를 설정 한 후 현재 디렉토리 ( toolkit디렉토리) 에서 모듈을 실행하십시오 . 파이썬은 이제 지정한 모듈을 찾아서로드해야합니다.

도움이 되었기를 바랍니다. 나는 이것에 대해 매우 좌절했다.


* nix에서 PYTHONPATH가 올바르게 구성되어 있는지, 특히 다음 형식을 갖는지 확인하십시오.

 .:/usr/local/lib/python

( .:처음 에는를 염두 에두고 현재 디렉토리에서도 검색 할 수 있습니다.)

버전에 따라 다른 위치에있을 수도 있습니다.

 .:/usr/lib/python
 .:/usr/lib/python2.6
 .:/usr/lib/python2.7 and etc.

나는 내 자신의 문제를 해결했으며, 잘못된 것들과 해결책에 대한 요약을 작성합니다.

파일을 정확히 호출해야합니다 __init__.py. 내 경우와 같이 확장명이 다르면 .py.binPython은 디렉토리를 이동할 수 없으며 모듈을 찾을 수 없습니다. 파일을 편집하려면 vi 또는 nano 와 같은 Linux 편집기를 사용해야합니다 . Windows 편집기를 사용하면 숨겨진 문자가 작성됩니다.

그것에 영향을 준 또 다른 문제는 루트로 다른 파이썬 버전을 설치했기 때문에 누군가 로컬 파이썬 설치로 작업하는 경우 프로그램을 실행하는 파이썬 설치가 로컬 파이썬인지 확인하십시오. 이를 확인하려면을 수행 which python하고 실행 파일이 로컬 디렉토리에있는 파일인지 확인하십시오. 그렇지 않은 경우 경로를 변경하되 로컬 Python 디렉토리가 다른 Python보다 앞에 있는지 확인하십시오.


디렉토리를 패키지로 표시하려면이라는 파일이 필요합니다. __init__.py도움이 되나요?


쉬운 해결책은 관리자 제한의 경우 sudo를 사용할 수있는 python -m pip install <library-name>대신 대신 모듈을 설치하는 것입니다.pip install <library-name>


사용 PyCharm하면 소스로 스크립트 디렉토리를 정의해야합니다 (JetBrains의 제품군의 일부) :
Right Click > Mark Directory as > Sources Root


예. __init__.py패키지를 초기화하는 파일 인 파일 을 포함 할 디렉토리가 필요합니다 . 여기, 한 번 봐 가지고 .

__init__.py 파일은 파이썬이 디렉토리를 패키지를 포함하는 것으로 취급하도록 요구합니다. 이는 문자열과 같은 공통 이름을 가진 디렉토리가 나중에 모듈 검색 경로에서 발생하는 유효한 모듈을 실수로 숨기지 않도록하기 위해 수행됩니다. 가장 간단한 경우 __init__.py는 빈 파일 일 수 있지만 패키지에 대한 초기화 코드를 실행하거나 나중에 설명하는 __all__ 변수를 설정할 수도 있습니다.


  1. 가져올 파일과 같은 디렉토리에 __ init__.py 파일이 있어야합니다.
  2. 동일한 이름을 가진 파일을 PYTHONPATH에 구성된 2 개의 폴더에서 파일을 가져 오려고 시도 할 수 없습니다.

예 : / etc / environment

PYTHONPATH = $ PYTHONPATH : / opt / folder1 : / opt / folder2

/ opt / folder1 / foo

/ opt / folder2 / foo

그리고 foo 파일을 가져 오려고하면 파이썬은 원하는 파일을 알지 못합니다.

foo import from ... >>> importerror : foo라는 모듈이 없습니다.


이 답변을 읽고 있으면 귀하 __init__.py가 올바른 위치에 있으며 모든 종속성을 설치했으며 여전히을 받고 있습니다 ImportError.

PyCharm을 사용하여 실행할 때 내 프로그램이 제대로 실행된다는 점을 제외하고 비슷한 문제에 직면했지만 터미널에서 실행할 때 위의 오류가 발생했습니다. 더 파고 들자 PYTHONPATH프로젝트 디렉토리에 대한 항목이 없다는 것을 알았습니다. 그래서 나는 설정 PYTHONPATH에 따라 PyCharm에 가져 오기 문이 작동하지만 터미널에서 :

export PYTHONPATH=$PYTHONPATH:`pwd`  (OR your project root directory)

다음 sys.path과 같이 사용하여이를 수행하는 다른 방법이 있습니다.

import sys
sys.path.insert(0,'<project directory>') OR
sys.path.append('<project directory>')

프로젝트를 검색하려는 순서에 따라 삽입 / 추가를 사용할 수 있습니다.


내 두 센트 :

여기에 이미지 설명을 입력하십시오

침:

Traceback (most recent call last):
      File "bash\bash.py", line 454, in main
        import bosh
      File "Wrye Bash Launcher.pyw", line 63, in load_module
        mod = imp.load_source(fullname,filename+ext,fp)
      File "bash\bosh.py", line 69, in <module>
        from game.oblivion.RecordGroups import MobWorlds, MobDials, MobICells, \
    ImportError: No module named RecordGroups

이것은 나에게 지옥을 혼란스럽게했습니다-추악한 syspath 해킹을 제안하는 게시물과 게시물을 보았습니다 (내가 __init__.py모두 거기에있는 것처럼 ). game / oblivion.py와 game / oblivion은 파이썬을 혼란스럽게해서 다소 도움이되지 않는 "No Module named RecordRecords"를 뱉어 냈습니다. 이 (동일한 이름) 동작을 설명하는 해결 방법 및 / 또는 링크-> 편집 (2017.01.24)- 모듈과 패키지가 동일한 이름을 가진 경우 어떻게됩니까? 흥미롭게도 일반적으로 패키지 가 우선하지만 런처가이를 위반하는 것 같습니다.

편집 (2015.01.17) : 나는 우리가 여기에 해부 된 사용자 정의 실행기를 사용한다고 언급하지 않았습니다 .


Linux : 가져온 모듈은 /usr/local/lib/python2.7/dist-packages에 있습니다.

C로 컴파일 된 모듈을 사용하는 경우 .so 파일을 chmod하는 것을 잊지 마십시오 sudo setup.py install.

sudo chmod 755 /usr/local/lib/python2.7/dist-packages/*.so

필자의 경우, 문제는 내가 디버그 python & 에 링크하는 것이었고 boost::Python, 확장은 FooLib_d.pyd단지 FooLib.pyd; 파일 이름을 바꾸거나 CMakeLists.txt속성을 업데이트 하면 오류가 해결되었습니다.


내 문제는 __init__.py실제로 부모 디렉토리를 추가해야 할 때 파일이 있는 디렉토리 를 PYTHONPATH에 추가한다는 것 입니다.


저에게는 정말 어리석은 일이었습니다. 사용하여 라이브러리를 설치 pip3 install했지만 python program.py와는 달리 프로그램을 실행 했습니다 python3 program.py. 때로는 그런 식입니다 ¯\_(ツ)_/¯.


위에 제공된 모든 방법을 시도했지만 실패한 경우 모듈 의 이름 이 내장 모듈 과 동일 할 수 있습니다 . 또는 폴더 보다 우선 순위가 높은 폴더에 동일한 이름sys.path 의 모듈이 있습니다.

디버깅하려면 from foo.bar import baz불만을 말하십시오 ImportError: No module named bar. 로 변경 import foo; print foo하면 경로가 표시됩니다 foo. 당신이 기대하는 것입니까?

그렇지 않은 경우 이름을 바꾸 foo거나 절대 가져 오기를 사용하십시오 .


필자의 경우 PyCharm과 PyCharm을 사용하기 때문에 프로젝트 폴더의 모든 프로젝트에 대해 'venv'를 만들지 만 파이썬의 미니 환경입니다. Python에서 필요한 라이브러리를 설치했지만 사용자 정의 프로젝트 'venv'에서는 사용할 수 없습니다. 이것이 PyCharm에서 'ImportError : xxxxxx라는 모듈이 없습니다'의 실제 원인입니다. 이 문제를 해결하려면 다음 단계에 따라 프로젝트 사용자 정의 환경에 라이브러리를 추가해야합니다.

  • PyCharm의 메뉴 '파일'-> 설정
  • 설정 대화 상자에서 프로젝트 : XXXProject-> 프로젝트 인터프리터
  • "추가"버튼을 클릭하면 '사용 가능한 패키지'대화 상자가 표시됩니다
  • 라이브러리를 검색하고 '패키지 설치'를 클릭하십시오
  • 그런 다음 필요한 모든 패키지가 프로젝트 사용자 정의 'venv'폴더에 설치됩니다.

설정 대화 상자

즐겨.


글을 작성 print (sys.path)하여 문제를 해결 하고 새로 설치해도 파이썬이 오래된 패키지를 사용하고 있음을 알았습니다. 이것을 만든 파이썬을 삭제하면 올바른 패키지가 자동으로 사용됩니다.


여전히이 문제가있는 모든 사람들에게. Pycharm이 수입품과 혼동된다고 생각합니다. 나에게 '네임 스페이스에서 가져 오기 가져 오기'를 쓰면 이전 줄에 빨간색 밑줄이 표시되어 오류가 있음을 알리지 만 작동합니다. 그러나``from .namespace import something ''에는 밑줄이 표시되지 않지만 작동하지 않습니다.

시험

try:
    from namespace import something 
except NameError:
    from .namespace import something

동일한 문제가 발생하면 pyc내 프로젝트에서 모든 파일 을 삭제하는 것이 해결 된 것으로 나타났습니다. 캐시 된 파일이 어떻게 든이 오류를 일으킨 것처럼 보입니다.

내가 찾은 가장 쉬운 방법은 Windows 탐색기에서 프로젝트 폴더로 이동하여을 검색 *.pyc한 다음 모두 ( Ctrl+ A) 를 선택 하고 삭제 ( Ctrl+ X)하는 것입니다.

특정 pyc파일을 삭제하여 문제를 해결할 수 있었지만 시도하지 않았습니다.


나는 같은 문제에 직면했다 Import error. 또한 라이브러리가 100 % 올바르게 설치되었습니다. 문제의 원인은 내 PC 3 버전의 python (anaconda packet)이 설치되어 있다는 것입니다. 이것이 바로 도서관이 올바른 장소에 설치되지 않은 이유입니다. 그 후 방금 IDE PyCharm에서 적절한 버전의 Python으로 변경했습니다.


나는 같은 오류가 있었다. 누군가 내 스크립트와 동일한 폴더에 폴더를 만들었 기 때문에 다른 곳에서 가져 오는 모듈과 이름이 충돌했습니다. 외부 모듈을 가져 오는 대신 예상 폴더가 포함되어 있지 않은이 폴더 내부를 살펴 보았습니다.


나는 같은 문제 (Python 2.7 Linux)를 가지고 있었고 해결책을 찾았으며 그것을 공유하고 싶습니다. 내 경우에는 아래 구조를 가졌습니다.

Booklet
-> __init__.py
-> Booklet.py
-> Question.py
default
-> __init_.py
-> main.py

'main.py'에서 모든 조합이 실패했습니다.

from Booklet import Question
from Question import Question
from Booklet.Question import Question
from Booklet.Question import *
import Booklet.Question
# and many othet various combinations ...

해결책은 생각보다 훨씬 간단했습니다. "소책자"폴더의 이름을 "소책자"로 바 꾸었습니다. 이제 파이썬은 'main.py'코드를 사용하여 Question 클래스를 정상적으로 가져올 수 있습니다.

from booklet.Booklet import Booklet
from booklet.Question import Question
from booklet.Question import AnotherClass

이것으로부터 나는 '소책자'와 같은 패키지 이름 (폴더)이 소문자로 시작해야한다는 결론을 내릴 수 있습니다. 그렇지 않으면 파이썬은 그것을 클래스 이름 및 파일 이름과 혼동합니다.

분명히 이것은 귀하의 문제는 아니지만 John Fouhy의 대답은 매우 좋으며이 스레드에는이 문제를 일으킬 수있는 거의 모든 것이 있습니다. 따라서 이것은 한 가지 더 있으며 다른 사람들에게 도움이되기를 바랍니다.


필자의 경우 실제 패키지 대신 package.egg 폴더의 경로를 포함 시켰습니다. 패키지를 최상위 수준으로 복사하면 효과가 있습니다.


이것은 나를 위해 일했습니다 : __init__.py부모 폴더 안에 파일을 만들었습니다 (귀하의 경우 site-packages폴더 안에 ). 그리고 다음과 같이 가져옵니다.

from site-packages.toolkit.interface import interface

그것이 당신에게도 도움이되기를 바랍니다!

참고 URL : https://stackoverflow.com/questions/338768/python-error-importerror-no-module-named



반응형