PyCharm 오류 : 자체 모듈을 가져 오려고 할 때 '모듈 없음'(파이썬 스크립트)


161

모듈 ( my_mod.py폴더에 있는 파일 파일 my_module)을 작성했습니다. 현재 cool_script.py폴더 에있는 파일에서 작업 하고 있습니다 cur_proj. File-open을 사용하여 PyCharm에서 폴더를 열었습니다 (따라서 PyCharm 프로젝트라고 가정합니다).

ProjectView (CMD-7)에서 내 프로젝트 cur_proj(빨간색)를 볼 수 있고 "외부 라이브러리"아래에 표시 my_module됩니다. cool_script.py에서 쓸 수 있습니다

from my_module import my_mod as mm

PyCharm도 my_mod를 제안합니다. 여태까지는 그런대로 잘됐다.

그러나 cool_script.py를 실행하려고하면 PyCharm에서 "my_module이라는 모듈이 없습니다"라고 말합니다.

나에게는 이상해 보인다. 왜냐하면

A) 터미널 (OS 10.10.2)의 파이썬에서는 모듈을 아무런 문제없이 가져올 수 있습니다-.bashrc의 PYTHONPATH에 해당하는 항목이 있습니다

B) PyCharm-설정-프로젝트 cur_proj-프로젝트 인터프리터-Python 인터프리터 옆에 CogWheel-자세히-선택한 인터프리터 아이콘의 경로를 표시하면 PYTHONPATH의 경로가 나타납니다 (필자가 생각하는 것처럼)

따라서 cool_script.py를 실행하려고하면 왜 오류가 발생합니까? - 내가 무엇을 놓치고 있습니까?

노트:

부록 2015 년 2 월 25 일

PyCharm에서 Run to Configuration-Edit Configurations로 이동하면 " PYTHONPATH에 컨텐츠 루트 추가 "및 " PYTHONPATH에 소스 루트 추가 " 확인 표시가있는 두 가지 옵션이 있습니다 . 둘 다 체크하지 않으면 모듈을로드 할 수 있습니다.

이제 작동 하지만 왜 그렇 습니까?

추가 질문이 생겼습니다.

  • "컨텐츠 루트"란 무엇이며 "소스 루트"는 무엇입니까? 그리고 왜 PYTHONPATH에 무언가를 추가하면 어떻게 든 파괴됩니까?
  • 항상 두 옵션 모두를 선택 해제해야합니까 (따라서 기본값은 프로젝트 특정 구성뿐만 아니라 실행 / 디버그 구성 대화 상자의 왼쪽 패널)?

2
이미 시도했지만 다른 패키지에서 모듈을 가져올 때는 packagename을 포함하십시오 from foldername.mymodule import mymethod. 내가해야했던 또 다른 일은 모듈에 도달하는 데 사용할 모든 폴더에 빈 _init .py 폴더 를 추가하여 from parentfolder.childfolder.mymodule ...두 개의 폴더에 init이 필요한 경우입니다 . 폴더가 서로 상대적인 위치에 sys.path
따라이

4
나도 너의 문제가 있었다. 다음 게시물은 내 문제를 해결했습니다. stackoverflow.com/questions/21236824/…
user3155053

해당 확인란을 선택 취소하면 실제로는 확인란을 선택하지 않고 작동하는 이유를 식별 했습니까?
행복을 추구하는 Nithish

나를 위해 일한 것은 PyCharm Pro 버전의 Enable Django Support설정 Languages & Frameworks -> Django을 확인 하지 않는 것입니다 . 장고 콘솔을 열어 가져 오기 문제가 발생했습니다.
에릭 블룸

답변:


324

자신의 모듈이 동일한 경로에있는 경우 경로를로 표시해야합니다 Sources Root. 프로젝트 탐색기에서 가져 오려는 디렉토리를 마우스 오른쪽 단추로 클릭하십시오. 그런 다음를 선택 Mark Directory As하고 선택하십시오 Sources Root.

이게 도움이 되길 바란다.


9
이것은 나를 위해 일했지만 폴더를 소스 루트로 표시하기 전에 이전에 만든 실행 구성을 삭제하고 다시 만들어야했습니다.
grinch

2
그리고 추가 할 필요가 __init__.py: 파이썬이 포함 된 패키지로 디렉토리를 치료하기 위해 stackoverflow.com/questions/448271/...
리즈 폰세카

pycharm을 사용하지 않았다면 어떻게 하시겠습니까? 나는 똑같은 문제에 봉착했다.
Boudewijn Aasman

@BeatrizFonseca 그렇습니다. 나는 그것을 숭고하게 작동시키지 못했지만 pycharm을 설치하고 여기에 답을 시도했지만 완벽하게 잘 작동 했으므로 올바른 디렉토리를 루트 패키지로 지정하는 것과 관련이 있어야합니다.
Boudewijn Aasman

@BoudewijnAasman .패키지 이름 앞에 사용 하여이 패키지가 로컬 패키지임을 지정할 수 있습니다.
Beatriz Fonseca

38

그래서 당신이 가면

-> 설정-> 프로젝트 : My_project-> 프로젝트 구조,

소스 코드를 사용할 수있는 디렉토리 만 "소스"로 표시하십시오 (동일한 창에서 볼 수 있음). 소스 코드가있는 디렉토리는 파란색으로 바뀌어야합니다. 이제 같은 디렉토리에있는 모듈을 가져올 수 있습니다.


3
나는 이것이 오래된 게시물이라는 것을 알고 있지만 그것은 나를 위해 감사했다.
Mike-SMT

1
동일한 답변을 여러 번 발생하고 무시했지만 이번에는 시도했지만 작동합니다!
A.Ametov

29

PyCharm 커뮤니티 / 전문가 2018.2.1

나는 지금이 문제를 겪고 있었고 @Beatriz Fonseca와 @Julie가 지적한 것과 비슷한 방식으로 해결할 수있었습니다.

당신이로 이동합니다 File> - Settings-> Project: YourProjectName-> Project Structure., 당신은 당신이 현재에서 작업하는 프로젝트의 디렉토리 레이아웃을해야합니다 당신은 당신의 디렉토리를 이동하고 중 하나 인로 레이블을해야합니다 Source모든 소스 파일에 대한 디렉토리 또는 Resource가져 오기 전용 파일 의 폴더로 사용할 수 있습니다.

또한 __init__.py리소스 디렉토리 내에 파일을 가져 오거나 실제로 가져 오려는 위치에 파일 을 배치 하면 완벽하게 작동합니다.

이 답변이 누군가를 돕기를 희망하며 JetBrains 가이 성가신 버그를 해결하기를 바랍니다.


2
이것은 PyCharm Professional 에만 국한된 것이 아니라이 기능은 PyCharm Community 에디션에서도 사용할 수 있습니다. 프로젝트 구조에서 모듈이 포함 된 디렉토리를 마우스 오른쪽 단추로 클릭 한 후 Mark Directory as컨텍스트 메뉴에서을 선택하고을 선택하십시오 Sources Root.
Astitva Srivastava

1
이 근원 근원의 의미가 무엇인지 조언 해 주시겠습니까? 그것은 내 문제를 해결했지만 왜 내가 그것을하는지 이해하지 못했습니다.
user3341078

8

내가 시도한 것은 내 파일이있는 위치를 찾는 것입니다.

예 : E:\git_projects\My_project\__init__.py is my location.

파일-> 설정-> 프로젝트 : 내 프로젝트-> 프로젝트 구조로 이동하여 언급 장소에 대한 내용 루트를 추가했습니다. E:\git_projects\My_project

그것은 나를 위해 일했다.


2
프로젝트 구조의 폴더를 소싱하십시오. 고마워.
Microos

@Virendra Patel과 @Microos에게 감사드립니다. 내 pycharm 프로젝트는에 /home/my_user/git_projects/this_git_project/this_pycharm_project/있습니다. 나는 /home/my_user/git_projects/this_git_project/콘텐츠 루트와 /home/my_user/git_projects/this_git_project/this_pycharm_project/유일한 소스 폴더로 추가 했으며 모든 것이 마침내 해결되었습니다.
KLaz

3

my_module는 모듈이 아닌 폴더이며 폴더를 가져올 수 없으며 my_mod.py와 동일한 폴더로 이동 cool_script.py한 다음 수행하십시오 import my_mod as mm. 이것은 파이썬이 현재 디렉토리와에서만보고 있기 때문에 같은 디렉토리에 있지 않으면 sys.path찾을 수 없기 때문입니다.my_mod.py

또는 다른 디렉토리에서 가져 오는 방법을 알려주는 답변을 여기 에서 찾을 수 있습니다 .

다른 질문에 관해서는, 나는 PyCharm을 사용하지 않기 때문에 모르겠습니다.


당신은 만들 수 초기화 폴더의 평을, 파이썬 인터프리터는 파이썬 패키지로 읽습니다 : mikegrouchy.com/blog/2012/05/be-pythonic-__init__py.html
리즈 폰세카

3

"PYTHONPATH에 소스 루트 추가"오류가 발생했습니다. 내 문제는 내가 좋아하는, 같은 이름을 가진 두 개의 폴더를하였습니다이었다 project/subproject1/thing/src그리고 project/subproject2/thing/src나는 둘 다 소스 루트로 표시했다. "thing"폴더 중 하나의 "thing1"이름 을 (고유 한 이름)으로 바꾸면 효과가 있습니다.

PyCharm이 선택된 소스 루트를 자동으로 추가하면 전체 경로를 사용하지 않으므로 동일한 이름의 폴더를 혼합합니다.


2

파이썬 인터프리터가 코드를 찾을 수 없을 때 발생할 수 있습니다. 이 위치에서 코드를 찾으려면 Python을 명시 적으로 언급해야합니다.

그렇게하려면 :

  • 파이썬 콘솔로 이동
  • sys.path.extend(['your module location'])Python 콘솔에 추가하십시오 .

귀하의 경우 :

  • 파이썬 콘솔로 이동하십시오.
  • 처음에 다음 코드를 작성하십시오.

    import sys
    sys.path.extend([my module URI location])
  • 이 문장을 작성하면 다음 명령을 실행할 수 있습니다.

    from mymodule import functions

그런 경로를 추가하는 것이 조금 추악하지만 그것은 나를 위해 일했습니다.
Florian Blume

이것은 콘솔을 열 때 자동으로 콘솔을 열 때 의존성 (다른 프로젝트)을 포함하는 디렉토리와 현재 프로젝트의 소스 코드를 포함하는 디렉토리에 대한 sys.path.extend 명령을 포함해야합니다. 그러나 그것은 자동으로하지 않습니다
fabiob

2

가장 혼란스러운 단계는 IDE가 새 경로를 선택하도록 실행하려는 소스 파일에 대한 실행 구성을 다시 작성하는 것입니다.

실제로 나를 위해 일한 방법은 구성 실행 / 편집 ...으로 이동하여 왼쪽에서 실행하려는 파일의 구성을 선택하고 "PYTHONPATH에 소스 루트 추가"상자를 선택 취소하고 저장하십시오. 다시 돌아가서 상자를 확인하고 저장하십시오. 그런 다음 작동합니다.


놀랍게도, 이것은 Invalidate Cache/Restart두 번이나 했지만 내가 필요한 것입니다 !
Josh Friedlander

1

컨텐츠 루트는 프로젝트 코드가 들어있는 폴더이며 소스 루트도 동일하게 정의됩니다. 내가 이해하게 된 유일한 차이점은 소스 루트의 코드가 콘텐츠 루트의 코드보다 먼저 빌드된다는 것입니다.

그것들을 체크 해제하면 패키지에서 장고에 수동으로 연결된 별도의 모듈을 만들지 않을 때까지 런타임에 영향을 미치지 않습니다. 즉, 파일에서 'from django import ...'를 보유하지 않거나 django를 통해 함수가 호출되지 않으면이 두 옵션을 선택 취소하면 오작동이 발생합니다.

업데이트-문제는 Virtual Environmanet을 사용할 때와 제공된 터미널을 통해 프로젝트를 제어 할 때만 발생합니다. 터미널이 여전히 가상 환경이 아닌 기본 시스템 pyhtonpath를 통해 작동합니다. 파이썬 장고 제어판은 정상적으로 작동합니다.


1

디렉토리를 소스 루트로 표시하지 않고이 문제점에 대한 해결책은 실행 구성을 편집하고 실행에서 "입력을 다음에서 리디렉션"옵션을 선택하고 실행할 스크립트를 선택하는 것입니다. 스크립트가이 디렉토리에서 대화식으로 실행 된 것처럼 처리되기 때문에 작동합니다. 그러나 파이썬은 여전히 ​​모듈 이름에 "x라는 모듈 없음"이라는 오류를 표시합니다.

다음에서 입력을 리디렉션 :

인터프리터는 import 문을 실행할 때 다음 소스에서 어셈블 된 디렉토리 목록에서 x.py를 검색합니다.

  1. 입력 스크립트가 실행 된 디렉토리 또는 인터프리터가 대화식으로 실행중인 경우 현재 디렉토리
  2. PYTHONPATH 환경 변수에 포함 된 디렉토리 목록입니다 (설정된 경우).
  3. 파이썬이 설치 될 때 구성된 설치 의존적 디렉토리 목록, 제 경우에는 우분투에서 usr / lib / python3.6입니다.

0

피 char 2017.1.1

  1. View->ToolBar& 클릭View->Tool Buttons
  2. 왼쪽 창 Project에서 마우스 오른쪽 단추를 클릭하고을 누른 Autoscroll to source 다음 코드를 실행하십시오.

이것은 나를 위해 일했습니다.


0

ln -s. someProject

someDirectory / someProjectDir과 file1.py 및 file2.py라는 두 개의 파일이 있고 file1.py가이 행을 가져 오려고 시도하는 경우

someProjectDir 가져 오기 file2에서

someProjectDir을 소스 디렉토리로 지정했거나 환경 설정, 프로젝트, 프로젝트 구조 메뉴에 컨텐츠 루트로 표시 되어도 작동하지 않습니다. 그것이 작동하는 유일한 방법은 위의 그림과 같이 프로젝트를 연결하는 것입니다 (unix 명령, mac에서는 작동하지만 Windows의 구문은 확실하지 않습니다). 소프트 링크가 종속 프로젝트에서 Pycharm에 의해 작성되었으므로 Pycharm이 버전 제어에서 체크 아웃하거나 컨텍스트 루트로 추가 할 때 자동으로이를 수행하는 메커니즘이 있습니다. 따라서 디렉토리의 이상한 복제가 성 가시고 필요성이 복잡 하기는하지만 동일하게 복사하는 것입니다. 또한 자동 생성되는 종속성에서는 버전 제어에서 새 디렉토리로 표시되지 않습니다. 아마도 .idea 파일을 비교하면 더 많은 것을 알 수 있습니다.


-1

나를 위해 일한 대답은 실제로 2015 업데이트에서 OP가 언급 한 내용이었습니다 .Python run 구성 에서이 두 상자 를 선택 취소 하십시오.

  • "PYTHONPATH에 컨텐츠 루트 추가"
  • "PYTHONPATH에 소스 루트 추가"

적절한 venv를 사용하도록 실행 설정을 이미 설정 했으므로 PyCharm이 경로에 항목을 추가하기 위해 추가 작업을 수행 할 필요가 없었습니다. 대신 오류가 발생했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.