Lỗi PyCharm: 'Không có Mô-đun' khi cố gắng nhập mô-đun riêng (tập lệnh python)


160

Tôi đã viết một mô-đun (một tệp my_mod.pytệp nằm trong thư mục my_module). Hiện tại, tôi đang làm việc trong tập tin cool_script.pynằm trong thư mục cur_proj. Tôi đã mở thư mục trong PyCharm bằng File - open (và tôi giả sử, do đó, nó là một dự án PyCharm).

Trong ProjectView (CMD-7), tôi có thể thấy dự án của mình cur_proj(màu đỏ) và trong "Thư viện bên ngoài" tôi thấy my_module. Trong cool_script.py, tôi có thể viết

from my_module import my_mod as mm

và PyCharm thậm chí còn đưa ra đề xuất cho my_mod. Càng xa càng tốt.

Tuy nhiên, khi tôi cố chạy cool_script.py, PyCharm nói với tôi "Không có mô-đun nào có tên my_module"

Điều này có vẻ lạ đối với tôi, bởi vì

A) trong thiết bị đầu cuối (OS 10.10.2), trong python, tôi có thể nhập mô-đun không có vấn đề gì - có một mục tương ứng trong PYTHONPATH trong .bashrc

B) trong PyCharm - Cài đặt - Project cur_proj - Trình thông dịch dự án - CogWheel bên cạnh trình thông dịch python - thêm - hiển thị các đường dẫn cho biểu tượng trình thông dịch đã chọn, các đường dẫn từ PYTHONPATH sẽ xuất hiện (theo tôi nghĩ họ nên)

Do đó, tại sao tôi gặp lỗi khi tôi cố chạy cool_script.py? - Tôi còn thiếu gì?

Ghi chú:

Phụ lục 2015-ngày 25 tháng 2

Khi tôi vào PyCharm để chạy - Chỉnh sửa cấu hình, cho dự án hiện tại của tôi, có hai tùy chọn được chọn với dấu kiểm: " Thêm gốc nội dung vào PYTHONPATH " và " Thêm gốc nguồn vào PYTHONPATH ". Khi tôi đã bỏ chọn cả hai, tôi có thể tải mô-đun của mình.

Vì vậy, nó hoạt động bây giờ - nhưng tại sao ?

Những câu hỏi khác xuất hiện:

  • "Rễ nội dung" là gì và "rễ nguồn" là gì? Và tại sao việc thêm một cái gì đó vào PYTHONPATH lại khiến nó bị hỏng?
  • Tôi có nên bỏ chọn cả hai tùy chọn đó mọi lúc (cũng như trong các mặc định, không chỉ các cấu hình cụ thể của dự án (bảng bên trái của hộp thoại Cấu hình chạy / gỡ lỗi)?

2
Bạn có thể đã thử điều này nhưng khi nhập mô-đun từ các gói khác, bao gồm packagename from foldername.mymodule import mymethod. Một điều khác tôi phải làm là thêm thư mục _init .py trống vào tất cả các thư mục mà bạn sẽ sử dụng để truy cập mô-đun của mình để trong trường hợp from parentfolder.childfolder.mymodule ...bạn cần init trong hai thư mục. Tùy thuộc vào vị trí các thư mục được đặt tương đối với nhau, bạn có thể cần có gói cấp cao nhất sys.pathnhư được mô tả trong câu trả lời
ziddarth 24/2/2015

4
Tôi cũng có vấn đề của bạn. Bài đăng sau đây đã giải quyết các vấn đề của tôi: stackoverflow.com/questions/21236824/ từ
user3155053

Bạn có xác định tại sao bỏ chọn các hộp kiểm đó thực sự hoạt động trái ngược với việc kiểm tra chúng không?
Nithish Inpursuit Ofhappiness

Những gì làm việc cho tôi là bỏ chọn Enable Django Supporttrong cài đặt Languages & Frameworks -> Djangotrong phiên bản Pro của PyCharm. Nó đã mở một giao diện điều khiển django gây ra vấn đề nhập khẩu.
Eric Blum

Câu trả lời:


324

Nếu mô-đun của riêng bạn nằm trong cùng một đường dẫn, bạn cần đánh dấu đường dẫn là Sources Root. Trong trình thám hiểm dự án, nhấp chuột phải vào thư mục mà bạn muốn nhập. Sau đó chọn Mark Directory Asvà chọn Sources Root.

Tôi hi vọng cái này giúp được.


9
Điều này làm việc cho tôi nhưng tôi cũng phải xóa và tạo lại cấu hình chạy mà tôi đã tạo trước đó trước khi đánh dấu thư mục là nguồn gốc.
grinch

2
Và cần thêm __init__.pyđể làm cho Python xử lý các thư mục chứa các gói: stackoverflow.com/questions/448271/
Khăn

Làm thế nào bạn sẽ làm điều này nếu bạn không sử dụng pycharm? Tôi đang gặp vấn đề chính xác như vậy.
Boudewijn Aasman

@BeatrizFonseca Có tôi đã làm. Tôi không thể làm cho nó hoạt động một cách tuyệt vời, nhưng tôi đã cài đặt pycharm và thử câu trả lời ở đây và nó hoạt động hoàn toàn tốt, vì vậy nó phải có một cái gì đó để làm với việc chỉ định đúng thư mục là gói gốc.
Boudewijn Aasman

@BoudewijnAasman bạn có thể thử sử dụng .trước tên gói để chỉ định rằng gói này là địa phương
Beatriz Fonseca

37

Vì vậy, nếu bạn đi đến

-> Cài đặt -> Dự án: My_project -> Cấu trúc dự án,

Chỉ cần thư mục chứa mã nguồn và đánh dấu là "Nguồn" (Bạn có thể thấy nó trên cùng một cửa sổ). Thư mục với mã nguồn sẽ chuyển sang màu xanh. Bây giờ bạn có thể nhập vào các mô-đun nằm trong cùng thư mục.


3
Tôi nhận ra đây là một bài viết cũ nhưng nó làm việc cho tôi cảm ơn.
Mike - SMT

1
Đã gặp và bỏ qua cùng một câu trả lời nhiều lần, lần này đã thử và nó hoạt động!
A.Ametov

29

Cộng đồng PyCharm / Chuyên nghiệp 2018.2.1

Tôi đã gặp vấn đề này ngay bây giờ và tôi đã có thể giải quyết nó theo cách tương tự như @Beatriz Fonseca và @Julie đã chỉ ra.

Nếu bạn đi đến File-> Settings-> Project: YourProjectName-> Project Structure, bạn sẽ có bố cục thư mục của dự án bạn đang làm. Bạn sẽ phải duyệt qua các thư mục của mình và gắn nhãn chúng là Sourcethư mục cho tất cả các tệp Nguồn của bạn hoặc như mộtResource thư mục cho các tệp được nhập hoàn toàn.

Bạn cũng sẽ muốn đảm bảo rằng bạn đặt __init__.pycác tệp trong các thư mục tài nguyên của mình hoặc thực sự ở bất cứ nơi nào bạn muốn nhập từ đó và nó sẽ hoạt động hoàn toàn tốt.

Tôi hy vọng câu trả lời này sẽ giúp được ai đó và hy vọng JetBrains sẽ khắc phục lỗi khó chịu này.


2
Điều này không dành riêng cho PyCharm Professional , thay vào đó, tính năng này cũng có sẵn trong phiên bản Cộng đồng PyCharm . Trong Cấu trúc dự án, bấm chuột phải vào thư mục chứa mô-đun, sau đó chọn Mark Directory astừ menu ngữ cảnh và chọnSources Root .
Astitva Srivastava

1
Bạn có thể vui lòng tư vấn ý nghĩa của Root Nguồn này là gì không. Mặc dù nó đã giải quyết vấn đề của tôi nhưng tôi không hiểu tại sao tôi lại làm việc đó.
dùng3341078

8

Những gì tôi đã cố gắng là tìm nguồn vị trí nơi tập tin của tôi.

ví dụ E:\git_projects\My_project\__init__.py is my location.

Tôi đã đi đến Tệp -> Cài đặt -> Dự án: My_project -> Cấu trúc dự án và thêm gốc nội dung vào vị trí được đề cập E:\git_projects\My_project

nó làm việc cho tôi


2
Nguồn thư mục trong Cấu trúc dự án làm việc cho tôi. Cám ơn.
Microos

Cảm ơn @Virendra Patel và @Microos. Dự án pycharm của tôi là trong /home/my_user/git_projects/this_git_project/this_pycharm_project/. Tôi đã thêm /home/my_user/git_projects/this_git_project/dưới dạng root nội dung và /home/my_user/git_projects/this_git_project/this_pycharm_project/là thư mục nguồn duy nhất và mọi thứ cuối cùng đã được giải quyết.
KLaz

3

my_modulelà một thư mục không phải là một mô-đun và bạn không thể nhập một thư mục, hãy thử di chuyển my_mod.pyđến cùng thư mục với cool_script.pyvà sau đó làm import my_mod as mm. Điều này là do python chỉ nhìn trong thư mục hiện tại vàsys.path và vì vậy sẽ không tìm thấy my_mod.pytrừ khi nó nằm trong cùng thư mục

Hoặc bạn có thể nhìn vào đây cho một câu trả lời nói cho bạn làm thế nào để nhập khẩu từ các thư mục khác.

Đối với các câu hỏi khác của bạn, tôi không biết vì tôi không sử dụng PyCharm.


Bạn có thể tạo một init .py trong một thư mục, trình thông dịch python sẽ đọc dưới dạng gói python: mikegrouchy.com/blog/2012/05/be-pythonic-__init__py.html
Beatriz Fonseca

3

Tôi cũng đã nhận được lỗi với "Thêm nguồn gốc vào PYTHONPATH". Vấn đề của tôi là tôi có hai thư mục có cùng tên, giống như project/subproject1/thing/srcproject/subproject2/thing/srcvà tôi đã có cả trong số họ đánh dấu là gốc nguồn. Khi tôi đổi tên một trong các "thing"thư mục thành"thing1" (bất kỳ tên duy nhất), nó đã hoạt động.

Có thể nếu PyCharm tự động thêm các nguồn gốc được chọn, thì nó không sử dụng đường dẫn đầy đủ và do đó trộn lẫn các thư mục có cùng tên.


2

Điều này có thể được gây ra khi trình thông dịch Python không thể tìm thấy mã của bạn. Bạn phải đề cập rõ ràng với Python để tìm mã của bạn ở vị trí này.

Làm như vậy:

  • Chuyển đến bảng điều khiển python của bạn
  • Thêm sys.path.extend(['your module location'])vào bảng điều khiển Python.

Trong trường hợp của bạn:

  • Chuyển đến bảng điều khiển python của bạn,
  • Khi bắt đầu, viết mã sau đây:

    import sys
    sys.path.extend([my module URI location])
  • Khi bạn đã viết câu lệnh này, bạn có thể chạy lệnh sau:

    from mymodule import functions

Một chút xấu xí để thêm con đường như vậy nhưng nó làm việc cho tôi.
Florian Blume

điều này nên được thực hiện bởi pycharm, tự động khi mở giao diện điều khiển, anh ta nên bao gồm các lệnh sys.path.extend cho các thư mục bao gồm các phụ thuộc (các dự án khác) và các thư mục chứa mã nguồn của dự án hiện tại. NHƯNG NÓ KHÔNG làm điều đó tự động
fabiob

2

Bước khó hiểu chính phải được thực hiện là tạo lại cấu hình chạy cho tệp nguồn mà bạn đang cố thực thi, để IDE chọn các đường dẫn mới.

Cách thực sự hiệu quả với tôi là vào Run / Chỉnh sửa cấu hình ..., chọn cấu hình cho tệp mà bạn đang cố chạy ở phía bên trái, bỏ chọn hộp "Thêm nguồn gốc vào PYTHONPATH", lưu, và sau đó quay lại và kiểm tra hộp và lưu lại. THEN nó sẽ làm việc.


Thật đáng ngạc nhiên, đây là những gì tôi cần, mặc dù đã làm Invalidate Cache/Restarthai lần!
Josh Friedlander

1

Rễ nội dung là các thư mục chứa mã dự án của bạn trong khi gốc nguồn cũng được định nghĩa giống nhau. Sự khác biệt duy nhất tôi hiểu là mã trong nguồn gốc được xây dựng trước mã trong gốc nội dung.

Bỏ chọn chúng sẽ không ảnh hưởng đến thời gian chạy cho đến khi bạn không tạo các mô-đun riêng biệt trong gói được kết nối thủ công với Django. Điều đó có nghĩa là nếu bất kỳ tệp nào của bạn không giữ 'từ nhập django ...' hoặc bất kỳ chức năng nào không được gọi qua django, việc bỏ chọn 2 tùy chọn này sẽ dẫn đến sự cố.

Cập nhật - vấn đề chỉ phát sinh khi sử dụng Môi trường ảo và chỉ khi kiểm soát dự án thông qua thiết bị đầu cuối được cung cấp. Nguyên nhân là thiết bị đầu cuối vẫn hoạt động thông qua hệ thống mặc định pyhtonpath chứ không phải env ảo. trong khi bảng điều khiển django python hoạt động tốt.


1

Giải pháp cho vấn đề này mà không cần phải đánh dấu Thư mục là Nguồn gốc là Chỉnh sửa cấu hình chạy và trong Thực thi, chọn tùy chọn "Chuyển hướng đầu vào từ" và chọn tập lệnh bạn muốn chạy. Điều này hoạt động vì sau đó nó được xử lý như thể tập lệnh được chạy tương tác trong thư mục này. Tuy nhiên Python vẫn sẽ đánh dấu tên mô-đun với lỗi "không có mô-đun có tên x":

Chuyển hướng đầu vào từ:

Khi trình thông dịch thực thi câu lệnh nhập, nó sẽ tìm kiếm x.py trong danh sách các thư mục được tập hợp từ các nguồn sau:

  1. Thư mục mà tập lệnh đầu vào được chạy hoặc thư mục hiện tại nếu trình thông dịch đang được chạy tương tác
  2. Danh sách các thư mục chứa trong biến môi trường PYTHONPATH, nếu nó được đặt.
  3. Một danh sách các thư mục phụ thuộc cài đặt được cấu hình tại thời điểm Python được cài đặt, trong trường hợp của tôi là usr / lib / python3.6 trên Ubuntu.

0

Pycharm 2017.1.1

  1. Bấm vào View->ToolBar&View->Tool Buttons
  2. Trên khung bên trái Projectsẽ hiển thị, nhấp chuột phải vào nó và nhấn Autoscroll to source và sau đó chạy mã của bạn.

Điều này làm việc cho tôi.


0

ln -s. một số dự án

Nếu bạn có someDirectory / someProjectDir và hai tệp, file1.py và file2.py và file1.py cố gắng nhập với dòng này

từ tệp nhập khẩuProProDir2

Nó sẽ không hoạt động, ngay cả khi bạn đã chỉ định someProjectDir làm thư mục nguồn và ngay cả khi nó hiển thị trong tùy chọn, dự án, menu cấu trúc dự án làm gốc nội dung. Cách duy nhất nó sẽ hoạt động là bằng cách liên kết dự án như hiển thị ở trên (lệnh unix, hoạt động trong mac, không chắc chắn về việc sử dụng hoặc cú pháp cho Windows). Dường như có một số cơ chế trong đó Pycharm thực hiện điều này một cách tự động khi thanh toán từ kiểm soát phiên bản hoặc thêm dưới dạng gốc ngữ cảnh, vì liên kết mềm được Pycharm tạo ra trong một dự án phụ thuộc. Do đó, chỉ cần sao chép giống nhau, mặc dù việc sao chép kỳ lạ của thư mục là gây phiền nhiễu và sự cần thiết là bối rối. Ngoài ra, trong phần phụ thuộc nơi tự động tạo, nó không hiển thị dưới dạng thư mục mới dưới sự kiểm soát phiên bản. Có lẽ so sánh các tập tin .idea sẽ tiết lộ nhiều hơn.


-1

Câu trả lời phù hợp với tôi thực sự là những gì OP đề cập trong bản cập nhật năm 2015 của anh ấy: bỏ chọn hai hộp này trong cấu hình chạy Python của bạn:

  • "Thêm rễ nội dung vào PYTHONPATH"
  • "Thêm nguồn gốc vào PYTHONPATH"

Tôi đã có cấu hình chạy được thiết lập để sử dụng venv thích hợp, vì vậy PyCharm thực hiện công việc bổ sung để thêm mọi thứ vào đường dẫn là không cần thiết. Thay vào đó, nó đã gây ra lỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.