ฉันเขียนโมดูล (ไฟล์my_mod.py
ไฟล์ที่อยู่ในโฟลเดอร์my_module
) ขณะนี้ฉันกำลังทำงานในไฟล์ที่อยู่ในโฟลเดอร์cool_script.py
cur_proj
ฉันได้เปิดโฟลเดอร์ใน 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) ใน terminal (OS 10.10.2) ใน python ฉันสามารถนำเข้าโมดูลได้โดยไม่มีปัญหา - มีรายการที่เกี่ยวข้องใน PYTHONPATH ใน. bashrc
B) ใน PyCharm - การตั้งค่า - Project cur_proj - Project Interpreter - CogWheel ถัดจาก python interpreter - เพิ่มเติม - แสดงพา ธ สำหรับไอคอน interpreter ที่เลือกเส้นทางจาก PYTHONPATH จะปรากฏขึ้น (อย่างที่ฉันคิดว่าควร)
เหตุใดฉันจึงได้รับข้อผิดพลาดเมื่อฉันพยายามเรียกใช้ cool_script.py - ฉันหายไปอะไร
หมายเหตุ:
- ฉันไม่ได้ประกาศงูหลามรุ่นพิเศษ / อื่นที่ด้านบนของ cool_script.py
- ฉันแน่ใจว่าเส้นทางที่
my_module
ถูกต้อง - ฉันใส่
__init__.py
ไฟล์ (ไฟล์เปล่า)ทั้งในmy_module
และในcur_proj
- ฉันไม่ได้ใช้
virtualenv
ภาคผนวก 2558 ถึง 25 ก.พ.
เมื่อฉันไปที่ PyCharm to Run - แก้ไขการกำหนดค่าสำหรับโครงการปัจจุบันของฉันมีสองตัวเลือกที่ถูกเลือกด้วยเครื่องหมายถูก: " เพิ่มรูทเนื้อหาไปยัง PYTHONPATH " และ " เพิ่มรูตซอร์สไปยัง PYTHONPATH " เมื่อฉันไม่ได้ทำเครื่องหมายทั้งคู่ฉันสามารถโหลดโมดูลได้
จึงทำงานได้ในขณะนี้ - แต่ทำไม ?
คำถามเพิ่มเติมโผล่ออกมา:
- "รูทเนื้อหา" คืออะไรและ "รูทซอร์ส" คืออะไร และทำไมการเพิ่มบางสิ่งใน PYTHONPATH จึงทำให้มันแตกได้?
- ฉันควรยกเลิกการเลือกทั้งสองตัวเลือกเหล่านี้ตลอดเวลา (ดังนั้นในค่าเริ่มต้นไม่เพียง แต่การกำหนดค่าเฉพาะโครงการ (พาเนลด้านซ้ายของกล่องโต้ตอบการกำหนดค่า Run / Debug)
Enable Django Support
ในการตั้งค่าLanguages & Frameworks -> Django
ใน PyCharm รุ่น Pro มันกำลังเปิดคอนโซล django ซึ่งทำให้เกิดปัญหาการนำเข้า
from foldername.mymodule import mymethod
รวมถึงแพคเกจ อีกสิ่งที่ฉันต้องทำคือการเพิ่มโฟลเดอร์_init .pyเปล่าในโฟลเดอร์ทั้งหมดที่คุณจะใช้เพื่อไปยังโมดูลของคุณดังนั้นในกรณีที่from parentfolder.childfolder.mymodule ...
คุณต้องการ init ในสองโฟลเดอร์ คุณอาจจำเป็นต้องมีแพ็คเกจระดับสูงสุดsys.path
ตามที่อธิบายไว้ในคำตอบ