ปัญหาการอ้างอิงที่ไม่ได้รับการแก้ไขใน PyCharm


373

ฉันมีโครงสร้างไดเรกทอรี

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

sys.path.insert()และฉันสามารถเข้าถึงโมดูลเครือข่ายด้วย

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

อย่างไรก็ตาม pycharm บ่นว่าไม่สามารถเข้าถึงโมดูลได้ ฉันจะสอน pycham เพื่อแก้ไขการอ้างอิงได้อย่างไร

ป้อนคำอธิบายรูปภาพที่นี่


4
โฟลเดอร์ src มี__init__.pyไฟล์หรือไม่
Puffin GDI

@ พัฟฟิน GDI: ไม่มันไม่ได้
prosseek

5
@PuffinGDI โฟลเดอร์ src ต้องการไฟล์init .py นี้หรือไม่
Jack Chi

ใช่เพื่อให้งูใหญ่ระบุแพ็คเกจ: stackoverflow.com/questions/42094723/…
rnoodle

ฉันเปลี่ยนชื่อชั้นเรียนและทำงานต่อไป เมื่อฉันกดรันมีข้อผิดพลาดนี้ลืมเปลี่ยนชื่อและลองค้นหาคำแนะนำ pycharm ระหว่างการนำเข้า ประณามคำแนะนำเป็นกรณี ๆ ไป! - ใหม่สำหรับงูใหญ่ !!
Vignesh Paramasivam

คำตอบ:


817

เพิ่มด้วยตนเองตามที่คุณได้ทำคือแน่นอนวิธีหนึ่งในการทำเช่นนี้ แต่มีวิธีที่ง่ายและเป็นเพียงแค่การบอก pycharm ที่คุณต้องการเพิ่มsrcโฟลเดอร์เป็นรากที่มาและจากนั้นเพิ่มรากแหล่งหลามของคุณ เส้นทาง.

ด้วยวิธีนี้คุณไม่จำเป็นต้องเขียนโค้ดลงในการตั้งค่าล่ามของคุณ:

  • เพิ่มsrcเป็นรูทเนื้อหาต้นฉบับ:

                            ป้อนคำอธิบายรูปภาพที่นี่

  • จากนั้นตรวจสอบให้แน่ใจว่าได้เพิ่มแหล่งที่มาลงในPYTHONPATH:

ป้อนคำอธิบายรูปภาพที่นี่

  • ตอนนี้การนำเข้าจะได้รับการแก้ไข:

                      ป้อนคำอธิบายรูปภาพที่นี่

ด้วยวิธีนี้คุณสามารถเพิ่มสิ่งที่คุณต้องการในฐานะที่เป็นรูตต้นทางและสิ่งต่าง ๆ จะทำงานได้อย่างง่ายดาย หากคุณไม่ได้ทำเครื่องหมายว่าเป็นซอร์สรูทคุณจะได้รับข้อผิดพลาด:

                                  ป้อนคำอธิบายรูปภาพที่นี่

หลังจากทั้งหมดนี้อย่าลืมรีสตาร์ท ในเมนู PyCharm เลือก: ไฟล์ -> ทำให้แคช / รีสตาร์ทไม่ถูกต้อง


16
วิธีนี้ใช้ได้ผลหากคุณใช้ปลั๊กอิน Python กับ IntelliJ
rob mayoff

13
วิธีนี้ใช้ได้ผล ปัญหาของมันคือเมื่อโปรแกรมเมอร์อื่นดึงรหัสจาก svn เธอต้องทำการตั้งค่าเดิมอีกครั้งเพื่อกำจัดข้อความแจ้งข้อผิดพลาด "unresolved reference"
Ben Lin

2
@GamesBrainiac การแก้ปัญหาคือ IDE สามารถแยกวิเคราะห์ "sys.path.insert (0," ./src ")" เพิ่มลงใน PYTHONPATH สำหรับไฟล์เฉพาะนี้จากนั้นให้การวิเคราะห์ไวยากรณ์ที่เหมาะสม
Ben Lin

2
คุณต้องตรวจสอบให้แน่ใจว่าเส้นทางรูทเนื้อหาของคุณนั้นถูกต้อง ใน pycharm 5 คุณสามารถพบสิ่งนี้ได้ในการตั้งค่า -> โครงการ -> โครงสร้างโครงการ
lps

1
ไดเรกทอรีย่อยจะไม่นำมาพิจารณาอย่างน่าประหลาด ตัวอย่างเช่นถ้าด้านล่างsrcเรามีviewsโฟลเดอร์ภายในที่ฉันมีmyview.pyฉันยังคงได้รับข้อผิดพลาดอ้างอิงที่ยังไม่ได้รับการแก้ไขเมื่อพยายามfrom src.views.myview import <my_function>...
SexyBeast

49
  1. ตรวจสอบ__init__.pyไฟล์ในsrcโฟลเดอร์
  2. เพิ่มsrcโฟลเดอร์เป็นแหล่งราก
  3. จากนั้นตรวจสอบให้แน่ใจว่าได้เพิ่มแหล่งที่มาลงในของคุณPYTHONPATH(ดูด้านบน)
  4. ในเมนู PyCharm เลือก: ไฟล์ -> ทำให้แคช / รีสตาร์ทไม่ถูกต้อง

11
ขั้นตอนสุดท้ายนี้เป็นสิ่งเดียวที่ขาดหายไปในโซลูชันของฉัน คำตอบที่ยอมรับได้อาจเพิ่มสิ่งนี้เข้าไป
aimbire

หากไม่มีขั้นตอนสุดท้ายที่กล่าวถึงที่นี่คำตอบที่ได้รับการยอมรับจะไม่ทำงาน คำตอบที่ยอมรับควรเพิ่มขั้นตอนนี้ด้วย /
santhosh kumar

23

หากใครยังคงดูที่นี้คำตอบที่ยอมรับยังคงใช้ได้กับ PyCharm 2016.3 เมื่อฉันลอง UI อาจมีการเปลี่ยนแปลง แต่ตัวเลือกยังคงเหมือนเดิม

กล่าวคือ คลิกขวาที่โฟลเดอร์รูท -> 'ทำเครื่องหมายไดเรกทอรีเป็น' -> รากที่มา


1
คำตอบที่ซับซ้อนมากมายในการสนทนานี้ โซลูชันที่นำเสนอที่นี่ทำงานได้อย่างง่ายดายสำหรับฉัน

16

หลังจากทดสอบวิธีแก้ปัญหาทั้งหมดแล้วฉันขอแนะนำให้คุณดูSettings -> Project -> project dependenciesและจัดเรียงใหม่

pycharm prefrence


มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน ฉันได้ติดตั้งที่pygameนั่นและไม่ได้มีปัญหาการอ้างอิงที่ไม่ได้แก้ไขเพิ่มเติม
Michal Przybylowicz

15

ปกติ$ PYTHONPATH จะใช้ในการสอนหลามล่ามพบโมดูลที่จำเป็น PyCharm จำเป็นต้องเพิ่มเส้นทางในการตั้งค่า

ป้อนคำอธิบายรูปภาพที่นี่


5

โดยทั่วไปนี่เป็นปัญหาของแพ็คเกจที่หายไปเพียงวางเครื่องหมายรูปหมวกในการอ้างอิงที่ไม่ได้รับการแก้ไขและกดAlt+Enterเพื่อเปิดเผยตัวเลือกจากนั้นคุณควรทราบวิธีการแก้ไข


4

หลังจากทำตามคำตอบที่ยอมรับแล้วการทำสิ่งต่อไปนี้จะแก้ไขให้ฉัน:

File→การSettings→การProject <your directory/project>→การProject Dependencies

เลือกไดเรกทอรี / โครงการที่ไฟล์ของคุณที่มีการนำเข้ายังไม่ได้แก้ไขอยู่และทำเครื่องหมายที่ช่องเพื่อบอก Pycharm ว่าโครงการนั้นขึ้นอยู่กับโครงการอื่นของคุณ

ลำดับชั้นโฟลเดอร์ของฉันแตกต่างจากที่อยู่ในคำถามเล็กน้อย ฉันเป็นเช่นนี้

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

การบอก Pycharm ที่ src ขึ้นอยู่กับการMyDirectoryแก้ไขปัญหาสำหรับฉัน!


4

แม้ว่าคำตอบทั้งหมดจะเป็นประโยชน์จริง ๆ แต่มีข้อมูลเล็ก ๆ ชิ้นหนึ่งที่ควรอธิบายอย่างชัดเจน:

  • โดยพื้นฐานแล้วโปรเจ็กต์ที่มีไดเรกทอรีลำดับชั้นหลายรายการจะทำงานเป็นแพคเกจที่มีคุณลักษณะบางอย่าง
  • ในการนำเข้าคลาสที่สร้างขึ้นในท้องถิ่นที่กำหนดเองเราจำเป็นต้องนำทางไปยังไดเรกทอรีที่มี.pyไฟล์และสร้างไฟล์__init__.py(ว่าง) ที่นั่น

เหตุใดสิ่งนี้จึงช่วยได้เพราะไฟล์นี้จำเป็นต้องใช้เพื่อให้ Python จัดการกับไดเรกทอรีที่มีแพ็คเกจ ไชโย!


3

ติดตั้งผ่าน PyCharm (ใช้ได้กับ Community Edition) เปิดขึ้นSettings > Project > Project Interpreterแล้วคลิกที่ไอคอนสีเขียวในภาพหน้าจอด้านล่าง ในช่องโต้ตอบที่สองที่เปิดขึ้นให้ป้อนชื่อแพ็คเกจแล้วคลิกปุ่ม 'ติดตั้งแพ็คเกจ'

ป้อนคำอธิบายรูปภาพที่นี่


2

หลายครั้งสิ่งที่เกิดขึ้นคือปลั๊กอินไม่ได้ติดตั้ง เช่น

หากคุณกำลังพัฒนาโครงการ django และคุณไม่มีปลั๊กอิน django ติดตั้งใน pyCharm แสดงว่าข้อผิดพลาด 'การอ้างอิงที่ไม่ได้รับการแก้ไข' อ้างอิง: https://www.jetbrains.com/pycharm/help/resolving-references.html


ต้องรวม + คำตอบที่ยอมรับ ( stackoverflow.com/a/21241988/6448384 )
Karuhanga

1

โปรดตรวจสอบว่าคุณใช้ล่ามที่ถูกต้องหรือไม่ ฉันได้รับข้อผิดพลาด "การอ้างอิงที่ไม่ได้รับการแก้ไข 'django'" เพื่อแก้ปัญหานี้ฉันเปลี่ยน Project Interpreter (Changed Python 3 เป็น Python 2.7) จากการตั้งค่าโครงการ: เลือก Project ไปที่ File -> Settings -> Project: -> Project Interpreter -> Brows และเลือกรุ่นหรือล่ามที่ถูกต้อง (เช่น /usr/bin/python2.7)


1

ในกรณีของฉันปัญหาคือฉันกำลังใช้ Virtual environmentซึ่งไม่สามารถเข้าถึงแพ็คเกจไซต์ทั่วโลก ดังนั้นล่ามจึงไม่ทราบแพ็คเกจที่เพิ่งติดตั้งใหม่

หากต้องการแก้ไขปัญหาเพียงแก้ไขหรือสร้างล่ามเสมือนจริงขึ้นมาใหม่และทำเครื่องหมายที่Inherit global site-packagesตัวเลือก

ป้อนคำอธิบายรูปภาพที่นี่


สิ่งนี้ไม่ได้ส่งผลที่ไม่พึงประสงค์และเอาชนะเหตุผลหนึ่งที่ใช้สภาพแวดล้อมเสมือนจริงหรือไม่? นั่นคือถ้าคุณใช้สภาพแวดล้อมนั้นและติดตั้งแพ็คเกจไซต์ทั่วโลกเหล่านั้นแสดงว่าคุณกำลังมีปัญหา นั่นคือสิ่งที่ฉันคิดว่า.
theStud54


0

เสร็จสิ้นใน PyCharm 2019.3.1 คลิกขวาที่โฟลเดอร์ src ของคุณ -> "ทำเครื่องหมายไดเรกทอรีเป็น" -> คลิกที่ "ไม่รวม"และโฟลเดอร์ src ของคุณควรเป็นสีน้ำเงิน


-1

Pycharm ใช้ venv ในคอนโซล venv settings -> project interpreter -> add interpreter -> inherit global site-packagesของคุณควรติดตั้งแพคเกจอย่างชัดเจนหรือไปใน


-1

ในรุ่นที่ใหม่กว่าของ pycharm คุณสามารถทำได้โดยคลิกขวาที่ไดเรกทอรีหรือแพ็คเกจหลามที่คุณต้องการนำเข้าไฟล์จากนั้นคลิกที่ 'ทำเครื่องหมายไดเรกทอรีเป็น' -> 'รากแหล่งที่มา'


-1

วิธีที่ง่ายที่สุดในการแก้ไขคือทำสิ่งต่อไปนี้ในซอฟต์แวร์ pyCharm ของคุณ:

คลิกที่: ไฟล์> การตั้งค่า> (โครงการ: ชื่อโครงการของคุณ)> Project Interpreter>

จากนั้นคลิกที่ไอคอน "+" ทางด้านขวาเพื่อค้นหาแพ็คเกจที่คุณต้องการและติดตั้ง

เพลิดเพลินกับการเข้ารหัส !!!


1
ยินดีต้อนรับสู่ Stack Overflow และขอบคุณสำหรับคำตอบของคุณ แม้ว่าสิ่งนี้อาจถูกต้องในอนาคตโปรดหลีกเลี่ยงการโพสต์ภาพหรือลิงก์ไปยังเว็บไซต์อื่น ๆ ลิงก์อาจหยุดทำงานในบางจุดทำให้คำตอบนี้มีประโยชน์น้อยสำหรับผู้ใช้รายอื่น
CyberJacob

@CyberJacob ขอบคุณมากและขอบคุณมากสำหรับคำแนะนำของคุณฉันได้แก้ไขคำตอบด้วยการลบภาพและเพิ่มข้อความแทน
zaid.mohammed
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.