PyCharm hatası: Kendi modülünü içe aktarmaya çalışırken 'Modül Yok' (python betiği)


161

Bir modül yazdım ( my_mod.pyklasörde bulunan bir dosya dosyası my_module). Şu anda, cool_script.pyklasörde bulunan dosya üzerinde çalışıyorum cur_proj. File - open kullanarak klasörü PyCharm'da açtım (ve bu nedenle bir PyCharm projesi olduğunu varsayıyorum).

ProjectView (CMD-7), benim proje cur_proj(kırmızı) ve "Dış Kütüphaneler" altında görebilirsiniz my_module. Cool_script.py'de yazabilirim

from my_module import my_mod as mm

ve PyCharm my_mod için bile önerilerde bulunuyor. Çok uzak çok iyi.

Ancak, cool_script.py çalıştırmaya çalıştığımda, PyCharm bana "my_module adında bir modül yok"

Bu bana tuhaf geliyor, çünkü

A) terminalde (OS 10.10.2), python'da, modülü problemsiz olarak alabilirim - .bashrc'deki PYTHONPATH'de karşılık gelen bir giriş

B) PyCharm'da - Ayarlar - Proje cur_proj - Proje Tercümanı - Python yorumlayıcısının yanındaki CogWheel - daha fazlası - seçilen yorumlayıcı simgesinin yollarını gösterir, PYTHONPATH'ın yolları görünür (bence düşündükleri gibi)

Bu nedenle, cool_script.py dosyasını çalıştırmayı denediğimde neden hatayı alıyorum? - Neyi özlüyorum?

Notlar:

Eki 2015-Şub-25

PyCharm'da Çalıştır - Yapılandırmaları Düzenle'ye gittiğimde, mevcut projem için, onay işaretli iki seçenek vardır: " PYTHONPATH'a içerik kökleri ekle " ve " PYTHONPATH'a kaynak kökleri ekle ". İkisi de işaretlenmediğinde modülümü yükleyebilirim.

Şimdi çalışıyor - ama neden ?

Başka sorular ortaya çıktı:

  • "İçerik kökleri" nedir ve "kaynak kökleri" nedir? PYTHONPATH'a bir şey eklemek neden onu bir şekilde kırıyor?
  • Bu seçeneklerin her ikisinin de işaretini kaldırmalı mıyım (bu nedenle varsayılan olarak, yalnızca projeye özgü yapılandırmalarda değil (Çalıştırma / Hata Ayıklama Yapılandırmaları iletişim kutusunun sol paneli)?

2
Bunu daha önce denemiş olabilirsiniz, ancak diğer paketlerden modülleri içe aktarırken paket adını ekleyin from foldername.mymodule import mymethod. Yapmam gereken başka bir şey , modülünüze ulaşmak için kullanacağınız tüm klasörlere boş _init .py klasörünü eklemektir, böylece from parentfolder.childfolder.mymodule ...iki klasörde init'e ihtiyacınız olacaktır. Klasörlerin birbirlerine göre nerede bulunduğuna bağlı sys.patholarak, bu cevapta
ziddarth

4
Senin de problemin vardı. Aşağıdaki yazı sorunlarımı çözdü: stackoverflow.com/questions/21236824/…
user3155053

Bu onay kutularının işaretini kaldırmanın, onları işaretlemenin aksine neden işe yaradığını belirlediniz mi?
Nithish Inpursuit Ofhappiness

Benim için işe yarayan, PyCharm'ın Pro sürümündeki Enable Django Supportayarların işaretini Languages & Frameworks -> Djangokaldırmak. İçe aktarma sorunlarına neden olan bir django konsolu açıyordu.
Eric Blum

Yanıtlar:


324

Kendi modülünüz aynı yoldaysa, yolu işaretlemeniz gerekir Sources Root. Proje gezgininde, içe aktarmak istediğiniz dizine sağ tıklayın. Sonra seçin Mark Directory Asve seçin Sources Root.

Umarım bu yardımcı olur.


9
Bu benim için çalıştı, ancak klasörü kaynak kökü olarak işaretlemeden önce daha önce oluşturduğum çalışma yapılandırmasını silmek ve yeniden oluşturmak zorunda kaldım.
grinch

2
Ve __init__.pyPython'un dizinleri paketler gibi ele almasını sağlamak için eklemeniz gerekir : stackoverflow.com/questions/448271/…
Beatriz Fonseca

Pycharm kullanmasaydın bunu nasıl yapardın? Ben de aynı problemle karşılaşıyorum.
Boudewijn Aasman

@BeatrizFonseca Evet yaptım. Yüce çalışmak için alamadım, ama pycharm'ı yükledim ve cevabı burada denedim ve mükemmel çalıştı, bu yüzden kök dizini olarak doğru dizini belirtmeyle ilgili bir şey olmalı.
Boudewijn Aasman

@BoudewijnAasman .Bu paketin yerel olduğunu belirtmek için paket adından önce kullanmayı deneyebilirsiniz
Beatriz Fonseca

38

Yani eğer gidersen

-> Ayarlar -> Proje: Projem -> Proje Yapısı,

Yalnızca kaynak kodun bulunduğu dizin ve "Kaynaklar" olarak işaretleyin (Aynı pencerede görebilirsiniz). Kaynak kodlu dizin maviye dönmelidir. Şimdi u aynı dizinde bulunan modüllere aktarabilirsiniz.


3
Bunun eski bir yazı olduğunu fark ettim ama benim için çalıştı, teşekkürler.
Mike - SMT

1
Aynı cevabı birçok kez karşılaştım ve görmezden geldim, bu sefer denedi ve işe yarıyor!
A.Ametov

29

PyCharm Topluluğu / Profesyonel 2018.2.1

Şu anda bu sorunu yaşıyordum ve @Beatriz Fonseca ve @Julie'nin işaret ettiği benzer bir şekilde çözebildim.

Eğer giderseniz File> - Settings-> Project: YourProjectName-> Project Structure., Şu anda çalışıyorsanız projenin bir dizin düzenini gerekecek Eğer dizinlere geçmesi ve ya varlık olarak etiketlemek gerekecek Sourcetüm Kaynak dosyalar için dizin veya Resourcekesinlikle içe aktarılacak dosyalar için bir klasör olarak .

Ayrıca __init__.py, kaynak dizinlerinize veya gerçekten içe aktarmak istediğiniz herhangi bir yere dosya yerleştirdiğinizden emin olmak istersiniz ve mükemmel bir şekilde çalışır.

Umarım bu cevap birine yardımcı olur ve umarım JetBrains bu can sıkıcı hatayı düzeltir.


2
Bu PyCharm Professional'a özgü değildir , bunun yerine bu özellik PyCharm Community sürümünde de mevcuttur. Proje Yapısı'nda, modülü içeren dizini sağ tıklatın, ardından Mark Directory asbağlam menüsünden seçin ve öğesini seçin Sources Root.
Astitva Srivastava

1
Lütfen bu Kaynaklar Kökünün ne anlama geldiğini bildirir misiniz? Gerçi sorunumu çözdü ama neden yaptığımı tam olarak anlamadı.
user3341078

8

Denediğim dosyalarımın bulunduğu yeri bulmak.

Örneğin E:\git_projects\My_project\__init__.py is my location.

Dosya -> Ayar -> Proje: My_project -> Proje Yapısı'na girdim ve söz konusu yere içerik kökü ekledim E:\git_projects\My_project

benim için çalıştı.


2
Proje Yapısındaki klasör benim için çalıştı kaynak. Teşekkürler.
Microos

@Virendra Patel ve @Microos. Pycharm projem hazır /home/my_user/git_projects/this_git_project/this_pycharm_project/. /home/my_user/git_projects/this_git_project/İçerik kökü /home/my_user/git_projects/this_git_project/this_pycharm_project/olarak ve tek kaynak klasör olarak ekledim ve her şey sonunda çalıştı.
KLaz

3

my_moduleBir klasör değil bir modül ve bir klasör alamıyor, hareketli deneyin my_mod.pyaynı klasöre cool_script.pyve ardından yapılacak import my_mod as mm. Bu piton yalnızca geçerli dizinde arar ve çünkü sys.path, ve böylece bulmak alışkanlık my_mod.pyaynı dizinde değilse

Yoksa bakabilirsiniz burada nasıl diğer dizinlere Alınacak bildiren bir cevap.

Diğer sorularınıza gelince, PyCharm'ı kullanmadığımı bilmiyorum.


Bir klasörde bir init .py oluşturabilirsiniz , python yorumlayıcısı python paketi olarak okunur: mikegrouchy.com/blog/2012/05/be-pythonic-__init__py.html
Beatriz Fonseca

3

Ben de "PYTHONPATH için kaynak kökleri ekle" hatası alıyordum. Benim sorunum gibi aynı ada sahip iki klasör vardı project/subproject1/thing/srcve project/subproject2/thing/srcben her ikisi de kaynak kökü olarak işaretlenmiş vardı. "thing"Klasörlerden birini "thing1"(herhangi bir benzersiz ad) olarak yeniden adlandırdığımda işe yaradı.

PyCharm otomatik olarak seçilen kaynak kökleri eklerse, tam yolu kullanmaz ve bu nedenle aynı ada sahip klasörleri karıştırır.


2

Bu durum Python yorumlayıcısı kodunuzu bulamadığında ortaya çıkabilir. Kodunuzu bu konumda bulmak için Python'dan açıkça bahsetmelisiniz.

Böyle yaparak:

  • Python konsolunuza gidin
  • sys.path.extend(['your module location'])Python konsoluna ekleyin .

Senin durumunda:

  • Python konsolunuza gidin,
  • Başlangıçta aşağıdaki kodu yazın:

    import sys
    sys.path.extend([my module URI location])
  • Bu ifadeyi yazdıktan sonra aşağıdaki komutu çalıştırabilirsiniz:

    from mymodule import functions

Yolu böyle eklemek için biraz çirkin ama benim için çalıştı.
Florian Blume

bu pycharm tarafından yapılmalıdır, otomatik olarak bir konsol açılırken bağımlılıklar (diğer projeler) ve mevcut projenin kaynak kodunu içeren dizinler için sys.path.extend komutlarını içermelidir. ANCAK otomatik olarak
yapmaz

2

Yapılması gereken kafa karıştırıcı adım, yürütmeye çalıştığınız kaynak dosya için çalıştırma yapılandırmasını yeniden oluşturmaktır, böylece IDE yeni yolları alır.

Benim için gerçekten işe yarayan yol Yapılandırmaları Çalıştır / Düzenle'ye gitmekti, sol tarafta çalıştırmaya çalıştığınız dosya için yapılandırmayı seçin, "PYTHONPATH'a kaynak kökleri ekle" kutusunun işaretini kaldırın, sonra geri dönün ve kutuyu işaretleyin ve kaydedin. O zaman işe yarayacaktı.


Şaşırtıcı, bu Invalidate Cache/Restartiki kez yapmasına rağmen, ne gerekli oldu !
Josh Friedlander

1

İçerik kökleri proje kodunuzu tutan klasörlerdir, kaynak kökleri de aynı şekilde tanımlanır. Anlamaya geldiğim tek fark, kaynak köklerdeki kodun içerik kökündeki koddan önce oluşturulmuş olmasıydı.

Bunların işaretini kaldırmak, paketinizde Django'ya manuel olarak bağlı ayrı modüller yapmadığınız ana kadar çalışma zamanını etkilemez. Bu, dosyalarınızdan herhangi birinde 'django içe aktarma işleminden ...' bulunmuyorsa veya işlevlerden herhangi biri django aracılığıyla çağrılmazsa, bu 2 seçeneğin işaretinin kaldırılması bir arızaya neden olur.

Güncelleme - sorun sadece Sanal Ortam'ı kullanırken ve yalnızca projeyi sağlanan terminal aracılığıyla kontrol ederken ortaya çıkar. Çünkü terminal hala sanal env ile değil, varsayılan sistem pyhtonpath ile çalışıyor. python django kontrol paneli iyi çalışıyor.


1

Dizini Kaynak Kökü Olarak İşaretlemek zorunda kalmadan bu sorunun çözümü, Çalıştırma Yapılandırmalarını Düzenlemek ve Yürütme'de "Girdiyi yeniden yönlendir" seçeneğini ve çalıştırmak istediğiniz komut dosyasını seçmektir. Bu, daha sonra komut dosyası bu dizinde etkileşimli olarak çalıştırılmış gibi işlendiği için çalışır. Ancak Python hala modül adını "x adında modül yok" hatasıyla işaretleyecektir:

Girdiyi şuradan yönlendir:

Yorumlayıcı içe aktarma ifadesini yürüttüğünde, aşağıdaki kaynaklardan birleştirilmiş dizinler listesinde x.py öğesini arar:

  1. Giriş komut dosyasının çalıştırıldığı dizin veya yorumlayıcı etkileşimli olarak çalıştırılıyorsa geçerli dizin
  2. Ayarlanmışsa, PYTHONPATH ortam değişkeninde bulunan dizinlerin listesi.
  3. Ubuntu'da usr / lib / python3.6 durumunda, Python kurulduğu sırada yapılandırılan, kuruluma bağlı dizinlerin listesi.

0

Pycharm 2017.1.1

  1. Tıklayın View->ToolBarveView->Tool Buttons
  2. Sol bölmede Projectgörünür, sağ tıklayın ve tuşuna basıp Autoscroll to source kodunuzu çalıştırın.

Bu benim için çalıştı.


0

ln -s. someProject

SomeDirectory / someProjectDir ve iki dosyanız varsa, file1.py ve file2.py ve file1.py bu satırla içe aktarmaya çalışır

someProjectDir içe aktarma dosyasından 2

SomeProjectDir'i kaynak dizin olarak atamış olsanız ve tercihler, proje, proje yapısı menüsünde içerik kökü olarak gösterilse bile çalışmaz. Çalışmanın tek yolu, projeyi yukarıda gösterildiği gibi bağlamaktır (unix komutu, mac'ta çalışır, Windows için kullanımdan emin değil veya sözdizimi). Yumuşak bağlantı bağımlı bir projede Pycharm tarafından oluşturulduğundan, Pycharm'ın bunu sürüm kontrolünden çıkışta veya bağlam kökü olarak eklemede otomatik olarak yaptığı bazı mekanizmalar var gibi görünüyor. Bu nedenle, sadece aynı kopyalamak, dizinin garip çoğaltılması sinir bozucu ve gereklilik şaşırtıcı. Ayrıca otomatik oluşturulduğu bağımlılıkta, sürüm kontrolü altında yeni dizin olarak gösterilmez. Belki de .idea dosyaları karşılaştırılması daha fazla ortaya çıkaracaktır.


-1

Benim için çalışan cevap gerçekten OP'nin 2015 güncellemesinde bahsettiği şeydi: Python run yapılandırmanızdaki bu iki kutunun işaretini kaldırın :

  • "PYTHONPATH'a içerik kökleri ekle"
  • "PYTHONPATH'a kaynak kökleri ekle"

Zaten uygun yapılandırma kullanmak için çalışma yapılandırma ayarlanmıştı, bu yüzden PyCharm yola şeyler eklemek için ek iş yapmak gerekli değildi. Bunun yerine hatalara neden oluyordu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.