Python에서 내 모듈을 가져올 수 없음
모듈 가져오기가 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
.py TestCase.py 에서 scripts.myapp.py TestCase.py 및 에서 다운로드 할 수 있습니다..py에서 내 앱을 실행합니다.py 에서 다음 작업을 수행합니다.
import SomeObject
같은 폴더에 있기 때문입니다.TestCase.py 의 경우 다음을 수행합니다.
from ..myapp import SomeObject
그러나 이 기능은 패키지에서 TestCase를 가져오는 경우에만 작동합니다.직접 실행할 경우python TestCase.py
당신은 당신의 길을 엉망으로 만들어야 할 것입니다. 작업은Python: 업작은 Python 내할있수습다 내에서 수.
import sys
sys.path.append("..")
from myapp import SomeObject
일반적으로 권장되지는 않지만,
일반적으로 다른 사용자가 Python 패키지를 사용하도록 하려면 distutils를 사용하여 설정 스크립트를 만들어야 합니다.그러면 누구나 다음과 같은 명령을 사용하여 패키지를 쉽게 설치할 수 있습니다.python setup.py install
그리고 그것은 그들의 기계 어디에서나 사용할 수 있을 것입니다.패키지에 대해 진심이라면 Python Package Index, PyPI에 추가할 수도 있습니다.
수import
PYTHONPATH env. 변수와 로컬 디렉터리에 있는 파일을 찾습니다.따라서 모든 파일을 동일한 디렉터리에 넣거나 경로 타이핑을 터미널로 내보낼 수 있습니다.
export PYTHONPATH="$PYTHONPATH:/path_to_myapp/myapp/myapp/"
경로를 내보내는 것이 좋은 방법입니다.다른 방법은 사이트 패키지 위치에 .pth를 추가하는 것입니다.Mac에서 my python은 아래 표시된 /Library/Python에 사이트 패키지를 보관합니다.
/Library/Python/2.7/site-packages
저는 /Library/Python/2.7/site-packages/awesome.pth라는 파일을 만들고 파일에 제 멋진 모듈을 참조하는 다음 경로를 넣었습니다.
/opt/awesome/custom_python_modules
시도해 보세요
from myapp.myapp import SomeObject
프로젝트 이름이 myapp.py 과 같아서 프로젝트 문서를 먼저 검색합니다.
당신은 가지고 있어야 합니다.
__init__.py
사용자가 상호 작용해야 하는 코드가 있는 모든 폴더에 있습니다.또한 가져오려는 파일이 동일한 수준에 있더라도 가져올 때마다 프로젝트의 최상위 폴더 이름을 지정해야 합니다.
첫 번째 myapp 디렉토리에서 setup.py 파일을 추가하고 설정에서 두 개의 파이썬 코드를 추가할 수 있습니다.파이의
from setuptools import setup
setup(name='myapp')
명령줄에서 첫 번째 myapp 디렉토리에서 pip install -e를 사용하여 패키지를 설치합니다.
pip install
윈도우즈 10에서는 관리자 권한이 필요한 디렉터리인 'Program Files/PythonXX/Lib/site-packages'에 기본 설치됩니다.그래서 관리자로 pip install을 실행하여 문제를 해결했습니다(관리자 계정으로 로그인한 경우에도 관리자로 명령 프롬프트를 열어야 합니다).또한 파이썬에서 pip을 호출하는 것이 더 안전합니다.
예.
python -m pip install <package-name>
대신에
pip install <package-name>
내가 모듈을 쓴다고 가정해 보겠습니다.
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
단답:
python -m ParentPackage.Submodule
모듈 플래그를 통해 필요한 파일을 실행하는 것이 저에게 효과가 있었습니다.다음과 같은 일반적인 디렉터리 구조를 얻었다고 가정해 보겠습니다.
my_project:
| Core
->myScript.py
| Utils
->helpers.py
configs.py
이제 다른 모듈에서 가져온 파일을 디렉터리 내에서 실행하려면 다음과 같이 하면 됩니다.
python -m Core.myscript
PS: 하위 모듈(실행할 파일/스크립트)을 참조하려면 도트 표기법을 사용해야 합니다.또한 저는 python3.9+를 사용했습니다.그래서 저는 init.py 이나 syspath append 문을 요구하지 않았습니다.
도움이 되길 바랍니다!해피 코딩!
저의 경우 Windows 파일 이름은 대소문자를 구분하지 않지만 Python 가져오기는 Windows 대 Python 서프라이즈였습니다.그래서 만약 당신이Stuff.py
이 이름을 있는 그대로 가져오는 데 필요한 파일입니다.
이것은 저에게 효과가 있었습니다.
from .myapp import SomeObject
그.
부모 모듈에서 로컬 모듈을 검색함을 나타냅니다.
아나콘다를 사용하면 다음을 수행할 수 있습니다.
conda develop /Path/To/Your/Modules
Shell에서 경로를 conda.pth 파일에 써넣으면 타사 모듈(내 경우 사이트 패키지)의 표준 디렉터리에 기록됩니다.
IPython Console을 사용하는 경우 IDE(예: 스파이더)가 올바른 작업 디렉토리(예: 프로젝트 폴더)를 가리키고 있는지 확인합니다.
승인된 답변과 같은 제안된 해결책 외에도, 저는 Pycharm에서 같은 문제를 겪었고, 위에서 제안한 상대 주소 지정과 같이 수입을 수정하고 싶지 않았습니다.
마침내 인터프리터 설정에서 src/(python 코드의 루트 디렉터리)를 소스로 표시하면 문제가 해결된다는 것을 알게 되었습니다.
언급URL : https://stackoverflow.com/questions/9383014/cant-import-my-own-modules-in-python
'programing' 카테고리의 다른 글
SQL 또는 Toad를 사용하여 테이블 정의를 추출하는 방법 (0) | 2023.07.01 |
---|---|
구체화된 견해란 무엇입니까? (0) | 2023.07.01 |
Java로 MongoDB에서 문서의 대량 업데이트를 수행하는 방법은 무엇입니까? (0) | 2023.07.01 |
두 Git 커밋 간에 변경된 모든 파일의 목록을 가져오는 방법은 무엇입니까? (0) | 2023.07.01 |
Git Revert 사용 방법 (0) | 2023.07.01 |