it-source

상대 Import - Module Not Found Error :x라는 이름의 모듈이 없습니다.

criticalcode 2022. 11. 1. 00:01
반응형

상대 Import - Module Not Found Error :x라는 이름의 모듈이 없습니다.

python 3를 실제로 사용해 본 것은 이번이 처음이며, 매우 실패하는 것 같습니다.다음의 2개의 파일이 있습니다.

  1. test.py
  2. 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 configryan입니다.sys.path.

main.py★★★★

$ python main.py
ryan.test
True
Absolute import failed

이 테스트는 "ryan" 패키지 내부에 있으며 상대적인 Import를 수행할 수 있습니다. import configPython 3의 Import.

도움이 됐으면 좋겠네요.

더 Python 3을 사용할 .__init__.pyfiles.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 ErrorImport 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 ConfigurationsPyCharm 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

반응형