Saya telah menulis modul (file my_mod.py
file yang berada di folder my_module
). Saat ini, saya bekerja di file cool_script.py
yang berada di folder cur_proj
. Saya telah membuka folder di PyCharm menggunakan File - open (dan saya berasumsi, karenanya, ini adalah proyek PyCharm).
Di ProjectView (CMD-7), saya bisa melihat proyek saya cur_proj
(merah) dan di bawah "Pustaka Eksternal" saya melihat my_module
. Di cool_script.py, saya bisa menulis
from my_module import my_mod as mm
dan PyCharm bahkan membuat saran untuk my_mod. Sejauh ini baik.
Namun, ketika saya mencoba menjalankan cool_script.py, PyCharm memberi tahu saya "Tidak ada modul bernama my_module"
Ini sepertinya aneh bagiku, karena
A) di terminal (OS 10.10.2), dengan python, saya dapat mengimpor modul tanpa masalah - ada entri yang sesuai di PYTHONPATH di .bashrc
B) di PyCharm - Pengaturan - Proyek cur_proj - Project Interpreter - CogWheel di sebelah python interpreter - more - menunjukkan jalur untuk ikon juru bahasa yang dipilih, jalur dari PYTHONPATH muncul (seperti yang saya pikir seharusnya).
Karenanya, mengapa saya mendapatkan kesalahan saat mencoba menjalankan cool_script.py? - Apa yang saya lewatkan?
Catatan:
- Saya tidak mendeklarasikan versi python berbeda / khusus di bagian atas cool_script.py
- Saya memastikan bahwa jalan menuju
my_module
benar - Saya menaruh
__init__.py
file (file kosong) baik dalammy_module
maupun dalamcur_proj
- Saya tidak menggunakan
virtualenv
Addendum 2015-Feb-25
Ketika saya masuk ke PyCharm untuk Menjalankan - Edit Konfigurasi, untuk proyek saya saat ini, ada dua opsi yang dipilih dengan tanda centang: " Tambahkan akar konten ke PYTHONPATH " dan " Tambahkan sumber akar ke PYTHONPATH ". Ketika saya tidak mencentang keduanya, saya dapat memuat modul saya.
Jadi itu berfungsi sekarang - tapi mengapa ?
Pertanyaan lebih lanjut muncul:
- Apa itu "root konten" dan apa yang "root sumber"? Dan mengapa menambahkan sesuatu ke PYTHONPATH membuatnya entah bagaimana rusak?
- haruskah saya hapus centang pada kedua opsi tersebut sepanjang waktu (demikian juga dalam pengaturan standar, tidak hanya konfigurasi spesifik proyek (panel kiri dari dialog Konfigurasi Konfigurasi Jalankan / Debug)?
from foldername.mymodule import mymethod
. Hal lain yang harus saya lakukan adalah menambahkan folder _init .py kosong di semua folder yang akan Anda gunakan untuk masuk ke modul Anda sehingga jikafrom parentfolder.childfolder.mymodule ...
Anda perlu init dalam dua folder. Tergantung di mana folder berada relatif satu sama lain, Anda mungkin perlu memiliki paket tingkat atassys.path
seperti yang dijelaskan dalam jawabanEnable Django Support
memeriksa pengaturanLanguages & Frameworks -> Django
di versi Pro PyCharm. Itu membuka konsol Django yang menyebabkan masalah impor.Jawaban:
Jika modul Anda sendiri berada di jalur yang sama, Anda perlu menandai jalur tersebut sebagai
Sources Root
. Di penjelajah proyek, klik kanan pada direktori yang ingin Anda impor. Kemudian pilihMark Directory As
dan pilihSources Root
.Saya harap ini membantu.
sumber
__init__.py
untuk membuat Python memperlakukan direktori sebagai berisi paket: stackoverflow.com/questions/448271/….
sebelum nama paket untuk menentukan bahwa paket ini adalah paket lokalJadi, jika Anda pergi ke
-> Pengaturan -> Proyek: My_project -> Struktur Proyek,
Hanya direktori di mana kode sumber tersedia dan tandai sebagai "Sumber" (Anda dapat melihatnya di jendela yang sama). Direktori dengan kode sumber harus berubah menjadi biru. Sekarang Anda dapat mengimpor modul yang berada di direktori yang sama.
sumber
Komunitas / Profesional PyCharm 2018.2.1
Saya mengalami masalah ini sekarang dan saya bisa menyelesaikannya dengan cara yang mirip yang ditunjukkan oleh @Beatriz Fonseca dan @Julie.
Jika Anda masuk ke
File
->Settings
->Project: YourProjectName
->Project Structure
, Anda akan memiliki tata letak direktori dari proyek yang sedang Anda kerjakan. Anda harus menelusuri direktori dan memberi label sebagaiSource
direktori untuk semua file Sumber Anda , atau sebagaiResource
folder untuk file yang hanya untuk impor.Anda juga ingin memastikan bahwa Anda menempatkan
__init__.py
file dalam direktori sumber daya Anda, atau benar-benar di mana pun Anda ingin mengimpor, dan itu akan berfungsi dengan baik.Saya harap jawaban ini membantu seseorang, dan semoga JetBrains akan memperbaiki bug yang mengganggu ini.
sumber
Mark Directory as
dari menu konteks dan pilihSources Root
.Apa yang saya coba adalah sumber lokasi di mana file saya berada.
misalnya
E:\git_projects\My_project\__init__.py is my location.
Saya pergi ke File -> Setting -> Project: My_project -> Project Structure dan menambahkan root konten ke tentang tempat yang disebutkan
E:\git_projects\My_project
itu berhasil untuk saya.
sumber
/home/my_user/git_projects/this_git_project/this_pycharm_project/
. Saya menambahkan/home/my_user/git_projects/this_git_project/
sebagai root konten dan/home/my_user/git_projects/this_git_project/this_pycharm_project/
sebagai satu-satunya folder sumber dan semuanya berhasil akhirnya.my_module
adalah folder bukan modul dan Anda tidak dapat mengimpor folder, coba pindahmy_mod.py
ke folder yang sama dengancool_script.py
dan kemudian lakukanimport my_mod as mm
. Ini karena python hanya melihat di direktori saat ini dansys.path
, dan karenanya tidak akan menemukanmy_mod.py
kecuali itu di direktori yang samaAtau Anda dapat melihat di sini untuk jawaban yang memberi tahu Anda cara mengimpor dari direktori lain.
Mengenai pertanyaan Anda yang lain, saya tidak tahu karena saya tidak menggunakan PyCharm.
sumber
Saya mendapatkan kesalahan dengan "Tambahkan akar sumber ke PYTHONPATH" juga. Masalah saya adalah bahwa saya memiliki dua folder dengan nama yang sama, seperti
project/subproject1/thing/src
danproject/subproject2/thing/src
dan saya memiliki keduanya ditandai sebagai root sumber. Ketika saya mengganti nama salah satu"thing"
folder menjadi"thing1"
(nama unik apa pun), itu berhasil.Mungkin jika PyCharm secara otomatis menambahkan root sumber yang dipilih, itu tidak menggunakan path lengkap dan karenanya mencampur folder dengan nama yang sama.
sumber
Ini bisa disebabkan ketika interpreter Python tidak dapat menemukan kode Anda. Anda harus menyebutkan secara eksplisit ke Python untuk menemukan kode Anda di lokasi ini.
Untuk melakukannya:
sys.path.extend(['your module location'])
ke konsol Python.Dalam kasus Anda:
Di awal, tulis kode berikut:
Setelah Anda menulis pernyataan ini, Anda dapat menjalankan perintah berikut:
sumber
Langkah membingungkan utama yang harus dilakukan adalah membuat ulang konfigurasi run untuk file sumber yang Anda coba jalankan, sehingga IDE mengambil jalur baru.
Cara yang benar-benar bekerja untuk saya adalah dengan pergi ke Jalankan / Edit Konfigurasi ..., pilih konfigurasi untuk file yang Anda coba jalankan di sisi kiri, hapus centang pada kotak "Tambahkan sumber akar ke PYTHONPATH", simpan, lalu kembali dan centang kotak dan simpan. MAKA itu akan berhasil.
sumber
Invalidate Cache/Restart
dua kali!Root konten adalah folder yang menyimpan kode proyek Anda sementara root sumber didefinisikan juga sama. Satu-satunya perbedaan yang saya pahami adalah bahwa kode di root sumber dibuat sebelum kode di root konten.
Hapus centang pada mereka tidak akan mempengaruhi runtime sampai Anda tidak membuat modul terpisah dalam paket Anda yang secara manual terhubung ke Django. Itu berarti jika ada file Anda yang tidak memegang 'from django import ...' atau salah satu fungsi tidak dipanggil melalui django, menghapus centang pada 2 opsi ini akan mengakibatkan kegagalan fungsi.
Pembaruan - masalah hanya muncul ketika menggunakan Virtual Environmanet, dan hanya ketika mengendalikan proyek melalui terminal yang disediakan. Karena terminal masih bekerja melalui sistem pyhtonpath default dan bukan env virtual. sedangkan panel kontrol python django berfungsi dengan baik.
sumber
Solusi untuk masalah ini tanpa harus Menandai Direktori sebagai Source Root adalah dengan Edit Run Configurations dan dalam Eksekusi pilih opsi "Redirect input from" dan pilih skrip yang ingin Anda jalankan. Ini berfungsi karena kemudian diperlakukan seolah-olah skrip dijalankan secara interaktif di direktori ini. Namun Python masih akan menandai nama modul dengan kesalahan "tidak ada modul bernama x":
Ketika penerjemah mengeksekusi pernyataan impor, ia mencari x.py dalam daftar direktori yang dikumpulkan dari sumber-sumber berikut:
sumber
Pycharm 2017.1.1
View->ToolBar
&View->Tool Buttons
Project
akan terlihat, klik kanan padanya dan tekanAutoscroll to source
lalu jalankan kode Anda.Ini berhasil untuk saya.
sumber
Dalam -s. beberapa proyek
Jika Anda memiliki someDirectory / someProjectDir dan dua file, file1.py dan file2.py, dan file1.py mencoba mengimpor dengan baris ini
dari file impor someProjectDir2
Itu tidak akan berfungsi, bahkan jika Anda telah menetapkan someProjectDir sebagai direktori sumber, dan bahkan jika itu ditampilkan dalam preferensi, proyek, menu struktur proyek sebagai root konten. Satu-satunya cara kerjanya adalah dengan menghubungkan proyek seperti yang ditunjukkan di atas (perintah unix, bekerja di mac, tidak yakin untuk menggunakan atau sintaks untuk Windows). Tampaknya ada beberapa mekanisme di mana Pycharm melakukan ini secara otomatis baik dalam checkout dari kontrol versi atau menambahkan sebagai root konteks, karena tautan lunak dibuat oleh Pycharm dalam proyek dependen. Oleh karena itu, hanya menyalin yang sama, meskipun replikasi aneh dari direktori itu mengganggu dan keharusan membingungkan. Juga di ketergantungan tempat otomatis dibuat, itu tidak ditampilkan sebagai direktori baru di bawah kontrol versi. Mungkin perbandingan file .idea akan mengungkapkan lebih banyak.
sumber
Jawaban yang berhasil bagi saya memang apa yang disebutkan OP dalam pembaruan 2015: hapus centang dua kotak ini di config run Python Anda:
Saya sudah memiliki set config yang diatur untuk menggunakan venv yang tepat, jadi PyCharm melakukan pekerjaan tambahan untuk menambahkan hal-hal ke jalan tidak diperlukan. Sebaliknya itu menyebabkan kesalahan.
sumber