Vấn đề tham khảo chưa được giải quyết trong PyCharm


373

Tôi có một cấu trúc thư mục

├── simulate.py
├── src
   ├── networkAlgorithm.py
   ├── ...

Và tôi có thể truy cập các mô-đun mạng với sys.path.insert().

import sys
import os.path
sys.path.insert(0, "./src")
from networkAlgorithm import *

Tuy nhiên, pycharm phàn nàn rằng nó không thể truy cập mô-đun. Làm thế nào tôi có thể dạy pycham để giải quyết các tài liệu tham khảo?

nhập mô tả hình ảnh ở đây


4
Thư mục src có __init__.pytập tin không?
Puffin GDI

@Puffin GDI: Không, không.
prosseek

5
@PuffinGDI Các thư mục src có cần tệp init .py này không?
Jack Chi

Có để python xác định các gói: stackoverflow.com/questions/42094723/ trên
rnoodle

Tôi đổi tên lớp và tiếp tục làm việc với nó. Khi tôi nhấn run, đã xảy ra lỗi này, hoàn toàn quên đổi tên và cố gắng tìm kiếm các đề xuất pycharm trong quá trình nhập. Chết tiệt, đề nghị là trường hợp nhạy cảm! - Mới trăn !!
Vignesh Paramasivam

Câu trả lời:


817

Bằng tay thêm nó như bạn đã làm thực sự là một cách để làm điều này, nhưng có một phương pháp đơn giản hơn, và đó là bằng cách đơn giản nói pycharm mà bạn muốn thêm vào srcthư mục như một gốc nguồn, và sau đó thêm các nguồn gốc để python của bạn con đường.

Bằng cách này, bạn không cần phải mã hóa mọi thứ vào cài đặt của trình thông dịch:

  • Thêm srcdưới dạng gốc nội dung nguồn:

                            nhập mô tả hình ảnh ở đây

  • Sau đó, đảm bảo thêm các nguồn vào PYTHONPATH:

nhập mô tả hình ảnh ở đây

  • Bây giờ nhập khẩu sẽ được giải quyết:

                      nhập mô tả hình ảnh ở đây

Bằng cách này, bạn có thể thêm bất cứ thứ gì bạn muốn làm gốc nguồn và mọi thứ sẽ đơn giản hoạt động. Tuy nhiên, nếu bạn bỏ đánh dấu nó là một nguồn gốc, bạn sẽ gặp lỗi:

                                  nhập mô tả hình ảnh ở đây

Sau tất cả, đừng quên khởi động lại. Trong menu PyCharm chọn: Tệp -> Bộ đệm / Khởi động lại không hợp lệ


17
Điều này cũng hoạt động nếu bạn đang sử dụng plugin Python với IntelliJ.
cướp mayoff

13
Giải pháp này hoạt động. Vấn đề của nó là khi một lập trình viên khác lấy mã từ svn, cô ấy phải thực hiện lại các cài đặt tương tự để thoát khỏi dấu nhắc lỗi "tham chiếu chưa được giải quyết".
Ben Lin

2
@GamesBrainiac, giải pháp là IDE có thể phân tích "sys.path.insert (0," ./src ")" thêm nó vào PYTHONPATH cho tệp cụ thể này, sau đó đưa ra phân tích cú pháp phù hợp.
Ben Lin

2
Bạn cũng cần đảm bảo đường dẫn gốc nội dung của bạn là chính xác. Trong pycharm 5, bạn có thể tìm thấy điều này trong Tùy chọn -> Dự án -> Cấu trúc dự án.
lps

1
Kỳ lạ thay, các thư mục con không được đưa vào tài khoản. Ví dụ: nếu bên dưới src, chúng tôi có viewsthư mục bên trong mà tôi có myview.py, tôi vẫn nhận được lỗi tham chiếu chưa được giải quyết khi thử from src.views.myview import <my_function>...
SexyBeast

49
  1. kiểm tra __init__.pytập tin trong srcthư mục
  2. thêm srcthư mục làm gốc nguồn
  3. Sau đó, đảm bảo thêm các nguồn vào PYTHONPATH(xem bên trên)
  4. trong menu PyCharm chọn: Tệp -> Bộ đệm / Khởi động lại không hợp lệ

11
Bước cuối cùng này là điều duy nhất còn thiếu trong giải pháp của tôi. Câu trả lời được chấp nhận có thể thêm nó vào nó.
aimbire

không có bước cuối cùng được đề cập ở đây, câu trả lời được chấp nhận sẽ không hoạt động. Câu trả lời được chấp nhận cũng nên thêm bước này /
santhosh kumar

23

Nếu bất cứ ai vẫn đang xem xét điều này, câu trả lời được chấp nhận vẫn hoạt động cho PyCharm 2016.3 khi tôi dùng thử. Giao diện người dùng có thể đã thay đổi, nhưng các tùy chọn vẫn giống nhau.

I E. Nhấp chuột phải vào thư mục gốc của bạn -> 'Đánh dấu thư mục là' -> Nguồn gốc


1
Vì vậy, nhiều câu trả lời phức tạp trong cuộc thảo luận này. Các giải pháp trình bày ở đây làm việc cho tôi rất dễ dàng.

16

Sau khi kiểm tra tất cả các cách giải quyết, tôi khuyên bạn nên xem Settings -> Project -> project dependenciesvà sắp xếp lại chúng.

pycharm


Điều này làm việc hoàn hảo cho tôi. Tôi đã cài đặt pygameở đó và không có nhiều vấn đề tham khảo chưa được giải quyết!
Michal Przybylowicz


5

Nói chung, đây là một vấn đề gói thiếu, chỉ cần đặt dấu mũ vào tham chiếu chưa được giải quyết và nhấn Alt+Enterđể hiển thị các tùy chọn, sau đó bạn nên biết cách giải quyết nó.


4

Sau khi làm theo câu trả lời được chấp nhận, làm như sau đã giải quyết nó cho tôi:

FileSettingsProject <your directory/project>Project Dependencies

Chọn thư mục / dự án nơi tệp của bạn đã nhập chưa được giải quyết cư trú và chọn hộp để thông báo cho Pycharm rằng dự án đó phụ thuộc vào dự án khác của bạn.

Hierarcy thư mục của tôi hơi khác với một trong câu hỏi. Của tôi là như thế này

├── MyDirectory  
     └── simulate.py  
├── src  
     ├── networkAlgorithm.py  
     ├── ...

Nói với Pycharm rằng src phụ thuộc vào việc MyDirectorygiải quyết vấn đề cho tôi!


4

Mặc dù tất cả các câu trả lời thực sự hữu ích, nhưng có một thông tin nhỏ cần được giải thích rõ ràng:

  • Về cơ bản, một dự án với nhiều thư mục phân cấp hoạt động như một gói với một số thuộc tính.
  • Để nhập các lớp được tạo cục bộ tùy chỉnh, chúng ta cần điều hướng đến thư mục chứa .pytệp và tạo tệp __init__.py(trống) ở đó.

Tại sao điều này có ích là vì tệp này được yêu cầu để làm cho Python coi thư mục là các gói chứa. Chúc mừng!


3

Cài đặt qua PyCharm (hoạt động với Community Edition). Mở lên Settings > Project > Project Interpretersau đó nhấp vào biểu tượng + màu xanh lá cây trong ảnh chụp màn hình bên dưới. Trong hộp thoại thứ 2 mở ra, nhập tên gói và nhấp vào nút 'Cài đặt gói'.

nhập mô tả hình ảnh ở đây



1

Vui lòng kiểm tra nếu bạn đang sử dụng đúng trình thông dịch mà bạn phải làm. Tôi đã gặp lỗi "tham chiếu chưa được giải quyết 'django'" để giải quyết vấn đề này Tôi đã thay đổi Trình thông dịch dự án (Đã thay đổi Python 3 thành Python 2.7) từ cài đặt dự án: Chọn Project, đi đến Tệp -> Cài đặt -> Dự án: -> Trình thông dịch dự án -> Duyệt và Chọn phiên bản chính xác hoặc Trình thông dịch (ví dụ: /usr/bin/python2.7).


1

Trong trường hợp của tôi, vấn đề là tôi đã sử dụng Virtual environmentmà không có quyền truy cập vào các gói trang web toàn cầu. Do đó, trình thông dịch không nhận thức được các gói mới được cài đặt.

Để giải quyết vấn đề, chỉ cần chỉnh sửa hoặc tạo lại trình thông dịch ảo của bạn và đánh dấu Inherit global site-packagestùy chọn.

nhập mô tả hình ảnh ở đây


Điều này không có hậu quả không mong muốn và đánh bại một lý do để sử dụng một môi trường ảo? Đó là, nếu bạn mang môi trường đó đi đâu đó và các gói trang web toàn cầu đó được cài đặt, thì bạn sẽ gặp rắc rối. Đó là những gì tôi nghĩ.
theStud54


0

Thực hiện trong PyCharm 2019.3.1 Nhấp chuột phải vào thư mục src của bạn -> "Đánh dấu thư mục là" -> Nhấp vào "Loại trừ" và thư mục src của bạn phải có màu xanh.


-1

Pycharm sử dụng venv. Trong bảng điều khiển của venv, bạn nên cài đặt các gói một cách rõ ràng hoặc đi vào settings -> project interpreter -> add interpreter -> inherit global site-packages.


-1

Trong các phiên bản mới hơn của pycharm, bạn có thể thực hiện đơn giản bằng cách nhấp chuột phải vào thư mục hoặc gói python mà bạn muốn nhập tệp, sau đó nhấp vào 'Đánh dấu thư mục dưới dạng' -> 'Nguồn gốc'


-1

Cách dễ nhất để khắc phục là bằng cách thực hiện như sau trong phần mềm pyCharm của bạn:

Bấm vào: Tệp> Cài đặt> (Dự án: tên dự án của bạn)> Thông dịch viên dự án>

sau đó nhấp vào biểu tượng "+" ở bên phải để tìm kiếm gói bạn muốn và cài đặt nó.

Thưởng thức mã hóa !!!


1
Chào mừng bạn đến với Stack Overflow, và cảm ơn câu trả lời của bạn. Mặc dù điều này có thể đúng, trong tương lai, vui lòng tránh đăng hình ảnh hoặc liên kết đến các trang web khác mà không có ngữ cảnh hoặc thông tin chi tiết. Liên kết có thể ngừng hoạt động tại một số điểm, làm cho câu trả lời này ít hữu ích hơn cho những người dùng khác.
CyberJacob

@CyberJacob Cảm ơn bạn rất nhiều, và cảm ơn rất nhiều vì lời khuyên của bạn, tôi đã chỉnh sửa câu trả lời bằng cách xóa hình ảnh và thêm văn bản thay thế.
zaid.mohammed
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.