문제

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

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

(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 툴킷 폴더에서 파이썬에 이것이 패키지임을 나타냅니다. 나도 a __init__.py.bin 예제 디렉토리에서.

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

도움이 되었습니까?

해결책

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

  1. 당신은 편집했습니다 __init__.py 창에.
  2. Windows 편집기는 비 인쇄, 아마도 캐리지 리턴 (Windows의 끝 끝이 Cr/lf; Unix에서는 lf 만) 또는 Ctrl-Z (Windows end-of-file)를 추가했습니다.
  3. WinSCP를 사용하여 파일을 Unix 상자에 복사했습니다.
  4. WinSCP는 다음과 같이 생각했습니다. "이것은 기본 텍스트가 아닌 것이 있습니다. 이진 데이터를 나타 내기 위해 .Bin 확장을 넣을 것입니다."
  5. 잃어버린 __init__.py (이제 호출 __init__.py.bin) Python은 툴킷을 패키지로 이해하지 못한다는 것을 의미합니다.
  6. 당신은 창조합니다 __init__.py 적절한 디렉토리와 모든 것이 작동합니다 ...?

다른 팁

하다

(local directory)/site-packages/toolkit

가지고있다 __init__.py?

수입을 만들기 위해 걷다 디렉토리를 통해 모든 디렉토리는 a가 있어야합니다 __init__.py 파일.

on *nix, PythonPath가 올바르게 구성되어 있는지, 특히이 형식을 가지고 있는지 확인하십시오.

 .:/usr/local/lib/python

(마음에 .: 처음에는 현재 디렉토리에서도 검색 할 수 있도록.)

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

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

나는 LPTHW 에서이 운동을했을 때 매우 비슷한 일을했다. 나는 Python이 내가 전화 한 디렉토리에 파일이 있다는 것을 인식하지 못하게 할 수 없었습니다. 그러나 나는 결국 그것을 일하게 할 수있었습니다. 내가 한 일과 내가 추천하는 것은 이것을 시도하는 것입니다.

(참고 : 귀하의 초기 게시물에서, 나는 당신이 *nix 기반 머신을 사용하고 있고 명령 줄에서 물건을 실행하고 있다고 가정하고 있기 때문에이 조언은 그것에 맞게 조정됩니다. Ubuntu를 실행하기 때문에 이것이 내가 한 일입니다).

1) 디렉토리 (CD) 변경 디렉토리로 변경 ~ 위에 파일이있는 디렉토리. 이 경우, 당신은 그것을 실행하려고합니다 mountain.py 파일을하고 전화하려고합니다 toolkit.interface.py 별도의 디렉토리에있는 모듈. 이 경우 두 파일에 대한 경로가 포함 된 디렉토리로 이동합니다 (즉, 두 파일의 경로가 공유하는 가장 가까운 디렉토리). 이 경우 toolkit 예배 규칙서.

2) 당신이있을 때 tookit 디렉토리, 명령 줄 에이 코드 줄을 입력하십시오.

export PYTHONPATH=.

이것은 PythonPath가 ""로 설정합니다. 기본적으로 PythonPath는 이제 현재 위치에있는 디렉토리 내의 호출 된 파일을 찾을 것임을 의미합니다. 하위 디렉토리 브랜치 당신이있는 디렉토리의. 그래서 그것은 당신의 현재 디렉토리만을 보는 것이 아니라 모든 디렉토리에서 안에 현재 디렉토리).

3) 위 단계에서 PythonPath를 설정 한 후 현재 디렉토리 ( toolkit 예배 규칙서). 파이썬은 이제 지정한 모듈을 찾고로드해야합니다.

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

나는 내 자신의 문제를 해결했고, 잘못된 것들과 해결책에 대한 요약을 쓸 것입니다.

파일을 정확히 호출해야합니다 __init__.py. 내 경우와 같이 연장이 다른 경우 .py.bin 그런 다음 파이썬은 디렉토리를 통해 이동할 수 없으며 모듈을 찾을 수 없습니다. 파일을 편집하려면 Linux 편집기를 사용해야합니다. VI 또는 나노. Windows 편집기를 사용하면 숨겨진 문자가 작성됩니다.

영향을 미치는 또 다른 문제는 루트가 다른 Python 버전을 설치 한 것이 었으므로 누군가가 로컬 로컬 설치를 사용하는 경우 프로그램을 실행하는 Python 설치가 로컬 Python인지 확인하십시오. 이것을 확인하려면 그냥하십시오 which python, 그리고 실행 파일이 로컬 디렉토리에있는 것인지 확인하십시오. 그렇지 않은 경우 경로를 변경하지만 로컬 파이썬 디렉토리가 다른 Python보다 이전인지 확인하십시오.

디렉토리를 패키지로 표시하려면 이름이 지정된 파일이 필요합니다. __init__.py, 이것이 도움이됩니까?

쉬운 솔루션은 모듈을 사용하여 설치하는 것입니다 python -m pip install <library-name> 대신에 pip install <library-name>관리자 제한의 경우 Sudo를 사용할 수 있습니다

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

예. 포함하려면 디렉토리가 필요합니다 __init__.py 파일은 패키지를 초기화하는 파일입니다. 여기, 살펴보십시오 이것.

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

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

예 : /etc /환경

pythonpath = $ pythonpath :/opt/folder1 :/opt/folder2

/opt/folder1/foo

/opt/folder2/foo

그리고 FOO 파일을 가져 오려면 Python이 원하는 것을 알지 못할 것입니다.

foo import에서 ... >>> 수입자 : foo라는 모듈 없음

내 두 센트 :

enter image description here

침:

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

이것은 나에게서 혼란 스러웠습니다. __init__.py 모두 거기에 있었다). Game/Oblivion.py와 Game/Oblivion이 Python을 혼란스럽게하는 것으로 밝혀졌습니다. 이 (동일한 이름) 동작을 문서화하는 해결 방법 및/또는 링크에 관심이 있습니다 -> 편집 (2017.01.24) - 살펴보십시오. 모듈과 동일한 이름의 패키지가 있으면 어떻게해야합니까? 흥미롭게도 일반적으로 패키지 우선권을 가지지 만 분명히 우리 발사기는 이것을 위반합니다.

편집 (2015.01.17) : 우리가 맞춤형 발사기 해부 여기.

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

C에서 컴파일 된 모듈을 사용하는 경우. sudo setup.py install.

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

당신은이 대답을 읽고 있습니다 __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>')

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

제 경우에는 문제가 연결되어 있다는 것이 문제였습니다. 디버그 python & boost::Python, 확장이 필요합니다 FooLib_d.pyd, 뿐만 아니라 FooLib.pyd; 파일 이름 변경 또는 업데이트 CMakeLists.txt 속성은 오류를 수정했습니다.

내 문제는 디렉토리를 __init__.py PythonPath에 파일을 파일, 실제로 부모 디렉토리를 추가해야 할 때.

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

디버그하고 말하십시오 from foo.bar import baz 불만 ImportError: No module named bar. 변경 import foo; print foo, 그것은 길을 보여줄 것입니다 foo. 당신이 기대하는 것입니까?

그렇지 않은 경우 이름을 바꿉니다 foo 또는 사용 절대 수입.

필자의 경우 Pycharm을 사용하고 Pycharm을 사용하고 있기 때문에 프로젝트 폴더의 모든 프로젝트에 대해 'Venv'를 만듭니다. Python에 필요한 라이브러리를 설치했지만 사용자 정의 프로젝트 'Venv'에서는 사용할 수 없습니다. 이것이 Pycharm에서 '수입업자 : XXXXXX라는 모듈'의 진정한 이유입니다. 이 문제를 해결하려면 다음 단계에서 프로젝트 사용자 정의 ENV에 라이브러리를 추가해야합니다.

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

Settings dialog

즐기다.

글을 쓰면서 내 문제를 수정했습니다 print (sys.path) 그리고 파이썬은 깨끗한 설치에도 불구하고 날짜가 아닌 패키지를 사용하고 있음을 알았습니다. 이 제작 된 파이썬 삭제는 올바른 패키지를 자동으로 사용합니다.

여전히이 문제가있는 모든 사람들에게. 나는 Pycharm이 수입과 혼동된다고 생각합니다. 나를 위해, '네임 스페이스 가져 오기'에서 '네임 스페이스 가져 오기'를 쓸 때, 이전 줄은 빨간색으로 밑줄을 긋고 오류가 있지만 작동한다는 신호를 보냅니다. 그러나``.namespace import '에서 무언가'가 밑줄이되지는 않지만 작동하지 않습니다.

노력하다

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

같은 문제를 겪은 후에는 내 결의안이 모두를 삭제하는 것이 었습니다. pyc 내 프로젝트의 파일은 이러한 캐시 된 파일이 어떻게 든이 오류를 일으킨 것처럼 보입니다.

이것을하는 가장 쉬운 방법은 Windows 탐색기의 프로젝트 폴더로 이동하고 검색하는 것입니다. *.pyc, 그런 다음 모든 것을 선택합니다 (Ctrl 키+) 및 삭제 (Ctrl 키+엑스).

가능할 가능성이 있습니다. 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 ...

솔루션은 내가 생각했던 것보다 훨씬 간단했습니다. 폴더 "소책자"를 "소책자"로 바꾸 었습니다. 이제 Python은 코드를 사용하여 클래스 질문을 정상적으로 가져올 수 있습니다.

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

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

분명히 이것은 당신의 문제가 아니라 John Fouhy 's 답변은 매우 좋으며이 스레드에는이 문제를 일으킬 수있는 거의 모든 것이 있습니다. 그래서 이것은 하나 더 하나입니다. 아마도 이것이 다른 사람들을 도울 수 있기를 바랍니다.

제 경우에는 실제 패키지보다는 PACKED.EGG 폴더로가는 경로를 포함했습니다. 패키지를 최상위 수준으로 복사했는데 효과가있었습니다.

이것은 나를 위해 효과가있었습니다 : 만들어졌습니다 __init__.py 상위 폴더 내부의 파일 (귀하의 경우, 내부 site-packages 폴더). 다음과 같이 수입합니다.

from site-packages.toolkit.interface import interface

그것이 당신에게도 유용하기를 바랍니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top