상대 Import - Module Not Found Error :x라는 이름의 모듈이 없습니다.
python 3를 실제로 사용해 본 것은 이번이 처음이며, 매우 실패하는 것 같습니다.다음의 2개의 파일이 있습니다.
- test.py
- config.py
config.py에는 몇 가지 변수뿐만 아니라 몇 가지 함수가 정의되어 있습니다.아래까지 정리했습니다.
config.py
debug = True
test.py
import config
print (config.debug)
I also have an 저도 있어요.__init__.py
다만, 다음의 에러가 표시됩니다.
ModuleNotFoundError: No module named 'config'
py3 규약은 절대 수입품을 사용하는 것으로 알고 있습니다.
from . import config
단, 이로 인해 다음 오류가 발생합니다.
ImportError: cannot import name 'config'
그래서 어떻게 해야 할지 막막해...어떤 도움이라도 대단히 감사합니다.:)
TL;DR: 실행한 파일에서 상대 Import를 수행할 수 없습니다.__main__
모듈은 패키지의 일부가 아닙니다.모듈은 패키지의 일부가 아닙니다.
절대 수입 - 어떤 것을 가져올 수 있습니다.sys.path
상대적으로 수입 - 현재 모듈 측 단락, 패키지의 일부여야 합니다.
두 변형이 정확히 동일한 방식으로 실행되면, 그들 중 하나는 작업해야 합니다.두 변형이 정확히 동일한 방식으로 실행되면, 그들 중 하나는 작업해야 합니다.여기 무슨 일이 일어나고 있는지 이해할 수 있는 예가 있습니다.여기 무슨 일이 일어나고 있는지 이해할 수 있는 예가 있습니다.른 다른 다 로 시 let'?main.py
file with the overall directory structure like this:이 같은 전체 디렉토리 구조를 가진 파일
.
./main.py
./ryan/__init__.py
./ryan/config.py
./ryan/test.py
And let's update 그리고 업데이트합시다.test.py
to see what's going on:무슨 일이 일어나고 있는 거죠?
# config.py
debug = True
# test.py
print(__name__)
try:
# Trying to find module in the parent package
from . import config
print(config.debug)
del config
except ImportError:
print('Relative import failed')
try:
# Trying to find module on sys.path
import config
print(config.debug)
except ModuleNotFoundError:
print('Absolute import failed')
# main.py
import ryan.test
Let's run 갑시다 그려test.py
첫째: 째:
$ python ryan/test.py
__main__
Relative import failed
True
여기 "시험"입니다.__main__
모듈 및 패키지에 대한 어떤 것을 알 수 없습니다., <고객명>님import config
ryan
입니다.sys.path
.
main.py
★★★★
$ python main.py
ryan.test
True
Absolute import failed
이 테스트는 "ryan" 패키지 내부에 있으며 상대적인 Import를 수행할 수 있습니다. import config
Python 3의 Import.
도움이 됐으면 좋겠네요.
더 Python 3을 사용할 .__init__.py
files.complete files files files files files files files files.
난 이해했다.특히 python2에서 나온다는 것은 매우 실망스러운 일입니다.
해서 '어울리지 않다'를 해요..
상대적인지 절대적인지에 관계없이 모듈로 이동합니다.
디렉토리 셋업은 다음과 같이 작성했습니다.
/main.py
--/lib
--/__init__.py
--/mody.py
--/modx.py
modx.py
def does_something():
return "I gave you this string."
mody.py
from modx import does_something
def loaded():
string = does_something()
print(string)
main.py
from lib import mody
mody.loaded()
메인을 실행하면 이렇게 됩니다.
$ python main.py
Traceback (most recent call last):
File "main.py", line 2, in <module>
from lib import mody
File "/mnt/c/Users/Austin/Dropbox/Source/Python/virtualenviron/mock/package/lib/mody.py", line 1, in <module>
from modx import does_something
ImportError: No module named 'modx'
2대 3으로 뛰었는데 핵심 출력은 이랬어요
RefactoringTool: Refactored lib/mody.py
--- lib/mody.py (original)
+++ lib/mody.py (refactored)
@@ -1,4 +1,4 @@
-from modx import does_something
+from .modx import does_something
def loaded():
string = does_something()
RefactoringTool: Files that need to be modified:
RefactoringTool: lib/modx.py
RefactoringTool: lib/mody.py
수정하기 위해 mody.py의 Import 명세서를 수정해야 했습니다.
try:
from modx import does_something
except ImportError:
from .modx import does_something
def loaded():
string = does_something()
print(string)
그 후 다시 main.py을 실행하여 예상 출력을 얻었습니다.
$ python main.py
I gave you this string.
마지막으로 청소하고 2시에서 3시 사이에 휴대할 수 있게 해주세요.
from __future__ import absolute_import
from .modx import does_something
프로젝트 경로를 다음에 추가해야 합니다.PYTHONPATH
절대 수입품을 사용하세요.
UNIX(Linux, OSX 등)의 경우
export PYTHONPATH="${PYTHONPATH}:/path/to/your/project/"
Windows 의 경우
set PYTHONPATH=%PYTHONPATH%;C:\path\to\your\project\
절대 수입
우리가 다음과 같은 프로젝트 구조를 가지고 있다고 가정하면,
└── myproject
├── mypackage
│ ├── __init__.py
│ ├── a.py
└── anotherpackage
├── __init__.py
├── b.py
├── c.py
└── mysubpackage
├── __init__.py
└── d.py
프로젝트의 루트 디렉토리에서 시작하는 각 Import를 참조해 주세요.예를 들어.
# in module a.py
import anotherpackage.mysubpackage.d
# in module b
import anotherpackage.c
import mypackage.a
자세한 설명은 "Module Not Found Error 및 Import Error 수정 방법" 문서를 참조하십시오.
PYTONPATH 를 설정하는 것도 이 문제에 도움이 됩니다.
Windows 에서는 다음과 같이 실행할 수 있습니다.
set PYTHONPATH=.
테스트 디렉토리에 다음 파일을 추가하면 python이 테스트 전에 실행할 수 있습니다.
__init__.py file
import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
★★PYTHONPATH
루트 프로젝트 디렉터리에 환경 변수가 있습니다.
UNIX와 같은 것을 고려:
export PYTHONPATH=.
당신의 예를 시험해 보았다.
from . import config
시스템 에러
3.4 testusr/bin/http 3.4 'py'
트최최최 ( 최최최최최최최최 ) :
"py의 행 1
. config 정 import import import import Import하다
모듈이.상대적인 Import를할 수 .SystemError : " " ( ) " Import " 。
이것으로 충분합니다.
import config
print('debug=%s'%config.debug)
>>>debug=True
Python으로 테스트 완료: 3.4.2 - PyCharm 2016.3.2
이 PyCharm 옆에 이 이름을 Import할 수 있습니다.
을 해야 요.config
도움말 아이콘이 나타납니다.
python 3+를 사용하는 경우 아래 행을 추가해 보십시오.
import os, sys
dir_path = os.path.dirname(os.path.realpath(__file__))
parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir))
sys.path.insert(0, parent_dir_path)
모듈을 호출하기 전에 올바른 sys.path 목록을 선언합니다.
import os, sys
#'/home/user/example/parent/child'
current_path = os.path.abspath('.')
#'/home/user/example/parent'
parent_path = os.path.dirname(current_path)
sys.path.append(parent_path)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'child.settings')
해라
from . import config
같은 폴더 레벨에서 Import 할 수 있습니다.직접 Import를 시도하면 부하로 간주됩니다.
【Linux】【Linux】【Linux】【Linux】키로 했다.도 달리기를 할 요.python my_module/__main__.py
.
커맨드를 됩니다.export PYTHONPATH=.
참の참
export PYTHONPATH=.
python my_module/__main__.py
이 예는 Python 3.6에서 동작합니다.
는 는는 to에 가는 을 추천합니다.Run -> Edit Configurations
PyCharm py을 py py 、파이캄 py py 、파이캄 py py 、파이캄 py py 、파이캄 py py 、파이캄 py py 、파이캄 py py py py py py py py 、
그래도 문제가 해결되지 않으면 프로젝트 인터프리터(설정 -> 프로젝트 인터프리터)를 확인하고 기본 설정(실행 -> 설정 편집...)을 실행합니다.
원래 투고 코멘트에 기재되어 있듯이, 이것은 어떤 이유로든 사용하고 있는 python interpreter의 문제이며, python 스크립트의 문제는 아닌 것 같습니다.python.org에서 WinPython 번들에서 공식 python 3.6으로 변경했는데 잘 작동했습니다.여러분, 감사합니다.
저는 현재 디렉토리를 추가하는 것만으로 충분했습니다.
다음 구조를 사용합니다.
└── myproject
├── a.py
└── b.py
a.py:
from b import some_object
# returns ModuleNotFound error
from myproject.b import some_object
# works
이 문들을 사용하여 작업 디렉토리를 설정할 수 있습니다.이 디렉토리는 다음과 같습니다.python3
import os
import sys
sys.path.insert(1, os.getcwd())
제 경험상 PYTONPATH 환경변수는 항상 동작하지 않습니다.
이 경우 pytest는 절대 경로 sys.path.insert(0, "/Users/bob/project/repo/lambda")를 추가했을 때만 작동합니다.
언급URL : https://stackoverflow.com/questions/43728431/relative-imports-modulenotfounderror-no-module-named-x
'it-source' 카테고리의 다른 글
Laravel Archent를 사용하여 Multiple Where 절 쿼리를 작성하는 방법 (0) | 2022.11.01 |
---|---|
작곡가를 어떻게 운영하죠? (0) | 2022.11.01 |
WooCommerce 주문 세부 정보 가져오는 방법 (0) | 2022.11.01 |
비단뱀 판다의 기둥 이름에서 기둥 색인 가져오기 (0) | 2022.11.01 |
__name__ == "_main__"인 경우:는 어떻게 합니까? (0) | 2022.11.01 |