파이썬에서 내 모듈을 가져올 수 없습니다


141

파이썬에서 모듈 가져 오기가 어떻게 작동하는지 이해하는 데 어려움을 겪고 있습니다 (다른 언어로는 해본 적이 없습니다).

내가 가지고 있다고 가정 해 봅시다.

myapp/__init__.py
myapp/myapp/myapp.py
myapp/myapp/SomeObject.py
myapp/tests/TestCase.py

이제 다음과 같은 것을 얻으려고합니다.

myapp.py
===================
from myapp import SomeObject
# stuff ...

TestCase.py
===================
from myapp import SomeObject
# some tests on SomeObject

그러나 파이썬 myapp이 모듈 이라는 것을 알 수 없으므로 뭔가 잘못하고 있습니다 .

ImportError: No module named myapp

답변:


96

특별한 경우 SomeObject에는 myapp.py 및 TestCase.py 스크립트에서 가져 오려는 것처럼 보입니다 . myapp.py에서

import SomeObject

같은 폴더에 있기 때문입니다. TestCase.py의 경우

from ..myapp import SomeObject

그러나 이는 패키지에서 TestCase를 가져 오는 경우에만 작동합니다. 직접 실행 python TestCase.py하려면 경로를 엉망으로 만들어야합니다. 이것은 파이썬 내에서 수행 할 수 있습니다 :

import sys
sys.path.append("..")
from myapp import SomeObject

일반적으로 권장되지는 않습니다.

일반적으로 다른 사람들이 Python 패키지를 사용하도록하려면 distutils 를 사용하여 설정 스크립트를 작성 해야합니다 . 이렇게하면 누구나 같은 명령을 사용하여 패키지를 쉽게 설치할 수 python setup.py install있으며 컴퓨터 어디에서나 사용할 수 있습니다. 패키지에 대해 진지한 경우 Python 패키지 색인 PyPI에 추가 할 수도 있습니다 .


나는 단순히 import내에서 사용하려고 TestCase.py했지만 여전히 같은 오류가 발생했습니다. 그것의 하위 디렉토리에 있기 때문에 가정하고 __init__.py있습니까?
n0pe

아 잠깐만 요. 내 테스트 케이스가 패키지에서 호출되는 경우 from ... import ...올바른 것을 사용할 수 있습니까?
n0pe

1
TestCase를 패키지 외부에서 가져 오는 경우에만 해당됩니다. 예를 들어, from myapp.tests import TestCase from a script outside myapp. If you're running 테스트 폴더 내에서 Python TestCase.py`를 실행 하면 상대적인 가져 오기를 수행 할 수 없습니다.
David Robinson

1
"pip install -e."를 실행하여 myapp를 설치했지만 Visual Studio 코드에서 TestCase를 실행하려고하면 "ImportError : No module named myapp"라는 메시지가 계속 표시됩니다. 그러나 "python"을 실행 한 다음 python에서 "myapp import SomeObject"를 실행하면 작동합니다. 내가 뭘 잘못하고 있죠?
dagrun

@DavidRobinson 나는 당신이 언급 한 방법을 사용 from fodername import file_name_of_my_py_code했는데, 실행 한 후에 오류가 없었지만 , file_name_of_my_py_code.py그것에 정의 된 객체에 액세스하려고했을 때NameError: name 'ClassName' is not defined
Kavin Raju S

44

이 함수 import는 PYTHONPATH 환경에서 파일을 찾습니다. 변수와 로컬 디렉토리. 따라서 모든 파일을 동일한 디렉토리에 넣거나 경로 입력을 터미널로 내보낼 수 있습니다.

export PYTHONPATH="$PYTHONPATH:/path_to_myapp/myapp/myapp/"

2
그렇다면 그것을 사용하는 다른 모든 사람들에게 어떻게 작동하는지 어떻게 알 수 있습니까? 오히려 특정 환경 변수를 실행하기 전에 설정하도록 지시하지 않아도됩니다.
n0pe

1
현재 디렉토리는 pythonpath에 있으며 스크립트가 동일한 폴더 / 디렉토리에있는 한 작동해야합니다. 불행히도 이러한 각 스크립트는 별도의 디렉토리에 있습니다.
JKirchartz

4
Windows 사용자의 경우 대신 export"set PYTHONPATH = % PYTHONPATH %; C : \ path_to_myapp \ myapp \ myapp \"를 설정했습니다
loved.by.Jesus

vs 코드에서 PYTHONPATH Env 변수를 launch.json : "env"에 추가하여이 문제를 해결할 수있었습니다. { "PYTHONPATH": "$ {workspaceFolder}"}
Michael Armitage

11

경로를 내보내는 것이 좋습니다. 다른 방법은 사이트 패키지 위치에 .pth를 추가하는 것입니다. 내 Mac에서 내 파이썬은 아래 표시된 / Library / Python에 사이트 패키지를 유지합니다.

/Library/Python/2.7/site-packages

/Library/Python/2.7/site-packages/awesome.pth에 awesome.pth라는 파일을 만들고 파일에 내 멋진 모듈을 참조하는 다음 경로를 넣습니다.

/opt/awesome/custom_python_modules

1
Windows에서 작업하는 경우 어떻게해야합니까
Nwawel A Iroume

잘 모르겠습니다. 창을 사용하는 경우 일부 vm 소프트웨어를 찾고 Linux를 사용하십시오. 또는-창에서 변수를 내보낼 때이 답변을 참조하십시오. stackoverflow.com/questions/559816/…
jmontross

이것이 바로 내가 필요한 것입니다
Lee88

1
:) 자신을 알아 내기 위해 나에게 그것을 렸어요 - 행복 Lee88 @ 것을 듣고
jmontross

9

당신은 시도 할 수 있습니다

from myapp.myapp import SomeObject

프로젝트 이름이 myapp.py와 동일하므로 프로젝트 문서를 먼저 검색합니다.


3

첫 번째 myapp 디렉토리에서 u는 setup.py 파일을 추가하고 setup.py에 두 개의 파이썬 코드를 추가 할 수 있습니다

from setuptools import setup
setup(name='myapp')

명령 행의 첫 번째 myapp 디렉토리에서 pip install -e를 사용하십시오. 패키지를 설치하려면


2

pip installWindows 10에서는 기본적으로 관리자 권한이 필요한 디렉토리 인 'Program Files / PythonXX / Lib / site-packages'에 설치됩니다. 따라서 관리자로 pip install실행 하여 문제를 해결했습니다 (관리자 계정으로 로그인 한 경우에도 관리자로 명령 프롬프트를 열어야 함). 또한 파이썬에서 pip를 호출하는 것이 더 안전합니다.
예를 들어,
python -m pip install <package-name>
대신
pip install <package-name>


0

필자의 경우 Windows 파일 이름은 대소 문자를 구분하지 않지만 Python 가져 오기는 Windows 대 Python 놀라움입니다. 따라서 Stuff.py파일이 있으면이 이름을 그대로 가져와야합니다.


0

당신은 가지고 있어야합니다

__init__.py

상호 작용해야하는 코드가있는 모든 폴더에서 가져 오려고 시도한 파일의 레벨이 같더라도 가져올 때마다 프로젝트의 최상위 폴더 이름을 지정해야합니다.

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