Python이 같은 폴더에서 모듈을 찾을 수 없습니다.


98

내 파이썬은 어떻게 든 같은 디렉토리에서 모듈을 찾을 수 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? (python2.7)

그래서 두 개의 파일이있는 '2014_07_13_test'디렉토리가 하나 있습니다.

  1. test.py
  2. hello.py

여기서 hello.py :

# !/usr/local/bin/python
# -*- coding: utf-8 -*-

def hello1():
    print 'HelloWorld!'

및 test.py :

# !/usr/local/bin/python
# -*- coding: utf-8 -*-

from hello import hello1

hello1()

여전히 파이썬은 나에게 준다.

>>> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 4, in <module>
ImportError: No module named hello

뭐가 문제 야?


2
스크립트를 어떻게 실행하고 있습니까? 또한 출력은 무엇입니까import sys; sys.path
Salem

1
시도>>> import test
마티

@Casy_fill 파일이있는 디렉토리에서 프로그램을 실행합니까? 가져 오기의 경우 가져 오기 및 가져온 파일이 디렉토리를 공유하는 것은 중요하지 않습니다. 중요한 것은 Python 인터프리터가 현재 디렉토리가 올바르게 설정되어 있다는 것입니다.
Jan Vlcinsky 2014

답변:


80

귀하의 코드는 괜찮습니다. 귀하의 문제는 귀하가 그것을 시작하는 방법이라고 생각합니다.

'2014_07_13_test'디렉토리에서 Python을 실행해야합니다.

명령 프롬프트를 열고 '2014_07_13_test'디렉토리에 'cd'를 입력합니다.

예를 들면 :

$ cd /path/to/2014_07_13_test
$ python test.py

이와 같이 디렉토리에 'cd'할 수 없으면 sys.path에 추가 할 수 있습니다.

test.py에서 :

import sys, os
sys.path.append('/path/to/2014_07_13_test')

또는 설정 / 편집 PYTHONPATH

그리고 모든 것이 잘되어야합니다 ...

... 'shebang'줄 (두 파일의 첫 줄)에 약간의 오류가 있습니다. '#'과 '!'사이에 공백이 있어서는 안됩니다.

더 나은 오두막은 사용한다은.

또한 모든 파일에 shebang 줄이 필요하지 않습니다. 쉘에서 실행 파일로 실행하려는 파일 만 있습니다.


고마워요, 그 문제! 내가 지금 수출 PATH에 필요한 것, 그래서 불행하게도 (내가 사용) SublimeRepl는 현재 폴더에서 파이썬을 시작하는 지원하지 않습니다
Philipp_Kats

나중에 독자들은 다른 매우 유용한 답변을 보려면 페이지 하단까지 읽어 보시기 바랍니다. 예를 들어 상대적인 수입 에 대한 jfn의 답변 입니다.
HongboZhu

네, 이것은 내 문제였습니다. VS Code에서 Python 연습 프로젝트의 큰 폴더를 열었고 같은 디렉토리에서 물건을 찾는 데 큰 문제가있었습니다. 내 문제는 터미널에서 디렉토리를 현재 프로젝트가있는 하위 디렉토리로 변경하지 않았다는 것입니다. 일단 그렇게하면 문제가 해결되었습니다.
Matt West

105

test.py에서 가져 오기를 다음과 같이 변경하십시오.

from .hello import hello1

23
다른 사람이 나중에 이것을 발견하면 이것을 상대 가져 오기라고하며 python 2.5에 추가되었습니다. docs.python.org/2.5/whatsnew/pep-328.html
sgfit

9
전체 모듈 사용을 가져 오려면from . import hello
ST7

나는 이것이 최선의 답변보다 더 나은 해결책이라고 생각합니다. ST7이 지적한대로 전체 모듈 가져 오기를 사용합니다.from . import local_module
Gene M

25

비슷한 문제가 있었는데 파일의 디렉토리를 경로 목록에 명시 적으로 추가하여 해결했습니다.

import os
import sys

file_dir = os.path.dirname(__file__)
sys.path.append(file_dir)

그 후 동일한 디렉토리에서 가져 오는 데 문제가 없었습니다.


2
이것이 작동하는 동안 상대 가져 오기를 사용하는 jwn의 대답은 훨씬 더 깨끗한 솔루션이었습니다.
Russ Schultz

16

내가 사용하는 일반적인 솔루션은 다음과 같습니다. 동일한 폴더에있는 모듈에서 가져 오는 문제를 해결합니다.

import os.path
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))

"No module named xxxx"라는 오류가 발생하는 모듈의 맨 위에 놓으십시오.


1
이것은 ".."를 "../ .."로 대체하여 상위 디렉토리에서 모듈을로드하는 데 도움이되었습니다. 감사합니다!
Nikola R.

1
이다 파일 우리가 모듈을 가져 가져올 파일이나 현재 모듈의 이름이 아니면 일정
마노

9

제 경우에는 코드를 하이픈이있는 모듈 안에 넣었 기 때문에 파이썬이 찾을 수 없었습니다 my-module. 내가 그것을 변경했을 때 my_module작동했습니다.


1

이 문제가 발생했습니다. 동일한 디렉토리에 세 개의 폴더가 있으므로 어느 폴더를 지정해야했습니다. 예 : 폴더 가져 오기 스크립트에서


0

다음은 OP의 문제를 해결하지 못하지만 제목과 오류는 정확히 내가 직면 한 것입니다.

프로젝트가있는 경우 setup.py그 안에 스크립트를, 당신은 당신이에 해당 패키지를 설치와 함께 할 수 python3 -m pip install -e .또는 python3 setup.py install또는 python3 setup.py develop,이 패키지가 설치되지만, (패키지를 가져올 때 코드를 변경가 볼 수 있도록) 여전히 편집 할 수 있습니다. 그것이이없는 경우 setup.py, 그것의 의미를 .

어쨌든 OP가 직면하는 문제는 더 이상 존재하지 않는 것 같습니다.

파일 one.py:

def function():
    print("output")

파일 two.py:

#!/usr/bin/env python3

import one
one.function()
chmod +x two.py # To allow execution of the python file
./two.py # Only works if you have a python shebang

Command line output: output

다른 솔루션은 '더러워 보인다'

두 개의 테스트 파일이있는 OP의 경우 작동하도록 수정하는 것이 좋습니다. 그러나 다른 실제 시나리오에서는 다른 답변에 나열된 방법이 권장되지 않을 수 있습니다. 파이썬 코드를 수정하거나 유연성을 제한해야하며 (특정 디렉토리에서 파이썬 파일 실행) 일반적으로 성가심을 유발합니다. 프로젝트를 방금 복제 한 경우 어떻게됩니까? 이미 다른 사람들에게도 효과가있을 수 있으며 코드를 변경할 필요가 없습니다. 선택한 답변은 사람들이 특정 폴더에서 스크립트를 실행하여 작동하도록하기를 원합니다. 이것은 결코 좋지 않은 장기적인 성가심의 원인이 될 수 있습니다. 또한 특정 python 폴더를 PATH에 추가 할 것을 제안합니다 (python 또는 명령 줄을 통해 수행 할 수 있음). 다시 말하지만, 몇 달 안에 폴더의 이름을 바꾸거나 폴더를 이동하면 어떻게됩니까? 이 페이지를 다시 찾아야합니다. 결국 경로를 설정해야하고 (몇 달 전에 정확히이 작업을 수행했음을) 경로를 업데이트하기 만하면된다 (sys.path를 사용하고 프로그래밍 방식으로 설정할 수 있지만 여전히 불안정 할 수 있음) ). 많은 성가심의 원인.


0

가져 오려는 모든 모듈, 파일이 동일한 폴더에 있고 참조 경로가 아닌 이름 만 제공하여 직접 선택해야하는 경우 편집기 또는 터미널에서 모든 파일 / 모듈이 있습니다.

어느 쪽이든, 터미널에서 실행을 시도하고 먼저 올바른 디렉토리로 이동했는지 확인하십시오.

CD path to the root folder where all the modules are

파이썬 script.py

또는 편집기, 즉 VsCode에서 [F5]를 실행하는 경우 개별 파일이 아닌 전체 폴더를 엽니 다.

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