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

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

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

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



답변

특별한 경우 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는 PYTHONPATH 환경에서 파일을 찾습니다. 변수와 로컬 디렉토리. 따라서 모든 파일을 동일한 디렉토리에 넣거나 경로 입력을 터미널로 내보낼 수 있습니다.

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


답변

경로를 내보내는 것이 좋습니다. 다른 방법은 사이트 패키지 위치에 .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


답변

당신은 시도 할 수 있습니다

from myapp.myapp import SomeObject

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


답변

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

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

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


답변

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


답변

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