개발/Python

Python에서 내 모듈을 가져올 수 없습니다.

MinorMan 2021. 1. 21. 09:18
반응형

<질문>

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

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

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

<답변1>

특정 경우에는 가져 오려는 것 같습니다.SomeObjectmyapp.py 및 TestCase.py 스크립트에서. myapp.py에서

import SomeObject

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

from ..myapp import SomeObject

하나, 이는 패키지에서 TestCase를 가져 오는 경우에만 작동합니다. 직접 실행하려면python TestCase.py, 당신은 당신의 경로를 망쳐 야 할 것입니다. 이것은 Python 내에서 수행 할 수 있습니다.

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

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

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


<답변2>

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

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

<답변3>

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

<답변4>

당신은 시도 할 수 있습니다

from myapp.myapp import SomeObject

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


<답변5>

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

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

명령 줄의 첫 번째 myapp 디렉토리에서 pip install -e를 사용합니다. 패키지를 설치하려면


<답변6>

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


<답변7>

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

__init__.py

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


<답변8>

제 경우에는 Windows 파일 이름이 대소 문자를 구분하지 않지만 Python 가져 오기는 Windows 대 Python 놀라움이었습니다. 그래서 만약 당신이Stuff.py이 이름을 그대로 가져와야합니다.


<답변9>

내가 모듈을 작성한다고하자

import os
my_home_dir=os.environ['HOME'] // in windows 'HOMEPATH'
file_abs_path=os.path.join(my_home_dir,"my_module.py")

with open(file_abs_path,"w") as f:
   f.write("print('I am loaded successfully')")

import importlib
importlib.util.find_spec('my_module') ==> cannot find

모듈을 찾을 위치를 파이썬에게 알려줘야합니다. 경로를 추가해야합니다.sys.path

 import sys
 sys.path.append(file_abs_path)

지금importlib.util.find_spec('my_module')보고:

  ModuleSpec(name='my_module', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7fa40143e8e0>, origin='/Users/name/my_module.py')

모듈을 생성하고 파이썬에 경로를 알려 줬습니다. 이제 가져올 수 있습니다.

 import my_module

//I am loaded successfully
반응형