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

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

뭐가 문제 야?



답변

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

‘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 줄이 필요하지 않습니다. 쉘에서 실행 파일로 실행하려는 파일 만 있습니다.


답변

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

from .hello import hello1


답변

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

import os
import sys

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

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


답변

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

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

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


답변

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


답변

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


답변

다음은 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를 사용하고 프로그래밍 방식으로 설정할 수 있지만 여전히 불안정 할 수 있음) ). 많은 성가심의 원인.