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.