Hizmete özel teklifTalebinizi bırakın, aynı gün dönelim; en geç 1 iş günü içinde yazılı teklifiniz hazırAynı gün dönüş · 1 iş gününde teklifTeklif alın
Yazılım

ModuleNotFoundError: No module named Hatası Nasıl Çözülür?

Talha Aslan 15 dakikalık okuma 4 görüntülenme

ModuleNotFoundError nedir ve ilk olarak ne yapmalısınız?

ModuleNotFoundError, Python'ın import satırında adı geçen modülü aradığı klasörlerde bulamadığını söyleyen bir hatadır. Genellikle paket kurulu değildir ya da kodu çalıştıran Python, paketi kurduğunuz Python'dan farklıdır. İlk iş, hangi yorumlayıcıyı kullandığınızı ve paketin orada kurulu olup olmadığını kontrol etmektir.

Bu yazı yalnızca tek bir soruna odaklanır: terminalde ya da editörde No module named uyarısını gördüğünüzde nereden başlayacağınız. Sahada gördüğümüz teşhis sırasını, en sık nedenden en nadir nedene doğru veriyoruz. Önce şunu kontrol etmenizi öneririz, çünkü vakaların büyük bölümünde sorun paketin kendisi değil, yanlış yorumlayıcıdır.

Ayrıca hatanın yapısını bilmek işinizi kolaylaştırır. ModuleNotFoundError, ImportError sınıfının bir alt türüdür. Yani Python, bu durumda modülün hiç bulunamadığını özellikle belirtir. Resmi ayrıntılar için Python import sistemi belgesine bakabilirsiniz.

Hızlı çözüm: ilk beş dakikada hangi adımları sırayla denemelisiniz?

Aşağıdaki sıra, en olası nedenden en az olası nedene doğru ilerler. Her adımdan sonra kodu yeniden çalıştırın ve hatanın değişip değişmediğine bakın.

  1. Hata mesajındaki modül adını not edin ve yazımını kontrol edin.
  2. Terminalde python -m pip --version komutunu çalıştırın ve çıkan yolun doğru Python'a ait olduğunu doğrulayın.
  3. Paketi python -m pip install paket-adi komutuyla, kodu çalıştırdığınız aynı Python ile kurun.
  4. Sanal ortam kullanıyorsanız, önce ortamı etkinleştirin ve komutu yeniden deneyin.
  5. Editör ya da Jupyter kullanıyorsanız, seçili yorumlayıcıyı ve çekirdeği kontrol edin.
  6. Kendi dosyanızın adının modülle aynı olmadığından emin olun.
  7. Proje içi modülse, dosyayı proje kök dizininden ve paket olarak çalıştırın.

Çoğu durumda üçüncü adım sorunu çözer. Yine de çözülmediyse aşağıdaki bölümlerde her nedeni tek tek ele alıyoruz.

Bu sıra bilinçli seçildi. Çünkü ModuleNotFoundError uyarısı gören biri çoğunlukla ilk önce paketi yeniden kurmayı dener, ama hangi Python'a kurduğuna bakmaz. Örneğin sürekli aynı komutu tekrarlamak yerine, önce yorumlayıcıyı doğrulamak size zaman kazandırır.

Hata mesajını nasıl okursunuz?

Mesajın iki parçası vardır: modülün adı ve kimi zaman ek bir not. En sık görünen biçim, modül adının tırnak içinde yazıldığı No module named satırıdır. Bu satır size aranan adı verir, bu yüzden önce o adı doğru okuyun.

Nokta ile ayrılmış adlara dikkat edin. Örneğin No module named 'paket.alt' mesajı, üst paketin bulunduğunu ama alt modülün bulunamadığını gösterebilir. Bazen mesajın sonunda üst adın bir paket olmadığını belirten bir ek not da görürsünüz. Bu durumda genellikle aynı adlı bir dosya, gerçek paketi gölgeliyordur.

Ayrıca traceback'in son satırından önceki satırlara bakın. Hangi dosyanın hangi satırında import yapıldığını orada görürsünüz. Böylece sorunun kendi kodunuzda mı, yoksa kurduğunuz bir kütüphanenin içinde mi olduğunu ayırt edersiniz. Genel hata ayıklama yaklaşımı için hata ayıklama teknikleri rehberimize göz atabilirsiniz.

Bir örnek verelim. Mesajda alt modül adı görünüyorsa, önce üst paketin kurulu olduğunu doğrulayın. Daha sonra üst paketin sürümüne bakın, çünkü eski sürümlerde alt modül henüz yoktur. Yani ModuleNotFoundError bazen paketin eksik değil, eski olduğunu söyler.

Not: Bir hata mesajını okurken sabırlı olmak gerekir. Aceleyle komut denemek, ortamı daha da karıştırabilir. Bu yüzden her adımda yalnızca bir şeyi değiştirin ve sonucu gözleyin. Böylece neyin işe yaradığını net olarak görürsünüz.

Paket gerçekten kurulu mu ve hangi Python'a kurulu?

Bu, en sık karşılaştığımız nedendir. Bilgisayarınızda birden fazla Python bulunabilir: sistem Python'ı, bir paket yöneticisinden gelen sürüm, ayrı bir kurulum ve her proje için sanal ortamlar. pip install komutu bunlardan birine kurar, kodunuz ise başka birini çalıştırabilir.

Çözüm basittir: pip'i doğrudan çağırmak yerine, kodu çalıştıran yorumlayıcı üzerinden çağırın. Böylece kurulum ile çalıştırma aynı Python'u kullanır. Aşağıdaki üç satır durumu netleştirir.

python -c "import sys; print(sys.executable)"
python -m pip --version
python -m pip show paket-adi

İlk komut çalışan Python'un yolunu verir. İkinci komut pip'in hangi Python'a bağlı olduğunu gösterir. Üçüncü komut paketin kurulu olup olmadığını ve nereye kurulduğunu listeler. İki yol birbirinden farklıysa, sorunu bulmuşsunuz demektir.

Bazı sistemlerde komutun adı python3 olabilir. Bu durumda yukarıdaki komutlarda python yerine python3 yazın. Kurulum yöntemlerinin resmi anlatımı için pip kullanıcı rehberine bakın.

Ayrıca işletim sistemi paket yöneticisinin kurduğu Python'a pip ile paket eklemeye çalışmak bazı sistemlerde engellenir. Bu bir hata değil, koruma önlemidir. Bu nedenle sistem Python'una dokunmayın; her proje için ayrı ortam açın.

Sanal ortam (venv) etkin değilse ne olur?

Sanal ortam, bir projenin paketlerini sistemden ayrı tutan klasördür. Ortamı etkinleştirmeden çalıştığınızda terminal sistem Python'unu kullanır. Paketler ise ortamın içinde kuruludur. Sonuçta kod, kurduğunuz paketi göremez.

Etkin ortamı anlamanın en kolay yolu, terminal satırının başındaki ortam adına bakmaktır. Yine de emin olmak için yukarıdaki sys.executable komutunu çalıştırın. Çıkan yol proje klasörünüzdeki ortamı gösteriyorsa etkinleştirme tamamdır.

Yeni bir ortam kurmak ve kullanmak için şu adımlar yeterlidir:

python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt

Windows'ta etkinleştirme betiği farklı bir klasörde durur. Ayrıntıları venv belgesinde bulabilirsiniz. Ayrıca ortamı etkinleştirmeyi unutan biri için en güvenli alışkanlık, her zaman python -m pip yazmaktır.

Üstelik ortam klasörünü başka bir yere taşıdığınızda etkinleştirme betiği eski yolları göstermeye devam edebilir. Bu durumda ModuleNotFoundError ya da komut bulunamadı hatası alırsınız. Çözüm, ortamı taşımak yerine yeniden oluşturmaktır.

Editörünüzün seçili yorumlayıcısı yanlış olabilir mi?

Evet, bu da çok yaygındır. Kod editörleri ve IDE'ler, çalıştırma düğmesine bastığınızda kendi seçili yorumlayıcılarını kullanır. Siz terminalde paketi kurarsınız, editör ise başka bir Python ile çalışır. Hata yalnızca editörde görünür, terminalde ise kod sorunsuz çalışır.

Bu durumu şöyle ayırt edersiniz: aynı dosyayı terminalde, etkin ortamla çalıştırın. Çalışıyorsa sorun editör ayarındadır. Ardından editörün yorumlayıcı seçim bölümünü açın ve projenizin ortamını seçin. Menü adları araca göre değiştiği için kesin buton metni yazmıyoruz; aracın kendi belgesindeki yorumlayıcı seçimi bölümüne bakın.

Bir de linter ile çalıştırma arasındaki farka dikkat edin. Editör kod altını kırmızıya boyayıp import'u bulamadığını söylüyorsa, çoğu zaman analiz motoru yanlış ortama bakıyordur. Kodu gerçekten çalıştırdığınızda hata çıkmıyorsa sorun yalnızca gösterimdedir.

Jupyter not defteri neden başka bir Python kullanır?

Not defterleri, bir çekirdek (kernel) üzerinden çalışır. Çekirdek, belirli bir Python kurulumuna bağlıdır. Terminalde ortamı etkinleştirip paketi kurmak, defterin çekirdeğini değiştirmez. Bu yüzden terminalde çalışan import, defterde hata verebilir.

Önce defterin içinde şu satırı çalıştırın ve yolu okuyun:

import sys
print(sys.executable)

Yol, beklediğiniz ortamı göstermiyorsa çekirdeği değiştirin ya da ortam için yeni bir çekirdek kaydedin. Kayıt için ortam etkinken python -m ipykernel install --user --name proje-ortami komutunu kullanabilirsiniz. Defter içinde paket kurmak için ise satır başına yüzde işaretiyle %pip install paket-adi yazın; bu komut, çekirdeğin kendi Python'una kurulum yapar.

Kurulumdan sonra çekirdeği yeniden başlatmanız gerekebilir. Aksi halde eski durum bellekte kalır ve hata sürer. Python ile yapay zeka çalışmalarına yeni başlıyorsanız Python ile yapay zeka yol haritamız bu ortam kurulumuna da değiniyor.

Paket adı ile import adı neden farklı olabilir?

Kurulum adı ile içe aktarma adı her zaman aynı değildir. pip'e yazdığınız ad, paket dizinindeki dağıtım adıdır. Kodunuzda yazdığınız ad ise modülün adıdır. İkisi arasında fark olması yasaldır ve oldukça yaygındır.

pip ile kurulan adimport satırındaki ad
PillowPIL
scikit-learnsklearn
PyYAMLyaml
beautifulsoup4bs4
python-dotenvdotenv
opencv-pythoncv2

Bu liste yalnızca örnektir; bir araç önerisi değildir. Kendi paketiniz için doğru import adını paketin resmi belgesinde bulursunuz. Yanlış adla kurulum yaparsanız ya hata alırsınız ya da benzer adlı başka bir paket kurarsınız. Bu nedenle kurulum komutunu paketin kendi sayfasından kopyalayın.

Popüler kütüphaneleri tanımak isterseniz en popüler Python kütüphaneleri yazımıza göz atın.

Kendi dosyanız modülle aynı adı taşıyorsa ne olur?

Buna gölgeleme denir. Python, import ederken önce çalışan betiğin bulunduğu klasöre bakar. Klasörde, örneğin, random.py ya da requests.py adlı kendi dosyanız varsa, Python gerçek modül yerine sizin dosyanızı yükler. Sonuç olarak ya bu modülde bir özellik bulunamaz ya da ilginç bir ModuleNotFoundError ortaya çıkar.

Belirtisi şudur: paket kurulu görünür, pip show çıktısı doğrudur, ama import yine de başarısız olur. Teşhis için modülün yüklendiği dosyayı yazdırın:

python -c "import json; print(json.__file__)"

Yol, standart kütüphane ya da ortamınızdaki site-packages klasörü yerine kendi proje klasörünüzü gösteriyorsa gölgeleme vardır. Çözüm için kendi dosyanızı yeniden adlandırın. Ayrıca klasördeki eski önbellek klasörlerini silin.

Bu hatayı önlemek için dosyalarınıza standart kütüphane ve popüler paket adlarını vermeyin. Hızlı prototiplerde bile test.py ya da email.py gibi adlardan kaçının.

Örneğin requests.py adlı dosyayı yanlışlıkla oluşturan biri, ModuleNotFoundError ya da AttributeError ile karşılaşır ve nedenini bulamaz. Bu yüzden garip bir hata görünce önce klasörünüzü listeleyin.

Proje yapısı ve göreli import neden hata verir?

Kendi modüllerinizi içe aktarırken sorun genellikle çalıştırma biçimindedir. Python, import yolunu betiği başlattığınız yere göre kurar. Dosyayı alt klasörden doğrudan çalıştırırsanız, proje kökü yola eklenmez. Bu yüzden kardeş klasördeki modül bulunamaz.

Örnek senaryo: proje kökünde uygulama adlı bir paket var ve içinde servis.py bulunuyor. Servis dosyasını alt klasörün içinden çalıştırdığınızda başka bir modül bulunamayabilir. Aynı dosyayı proje kökünden modül olarak çalıştırırsanız sorun kalkar.

python -m uygulama.servis

Buradaki -m bayrağı, Python'a dosyayı yol olarak değil modül olarak çalıştırmasını söyler. Bayrağın ayrıntıları komut satırı belgesinde anlatılır.

Ayrıca klasörlerin paket olarak görülmesi için tarihsel olarak __init__.py dosyası kullanılır. Modern Python, bu dosya olmadan da klasörleri ad alanı paketi olarak ele alır. Yine de açık bir paket istiyorsanız boş bir __init__.py eklemek güvenli ve anlaşılır bir tercihtir.

Göreli import ile mutlak import arasında ne fark var?

Mutlak import, paketin tam yolunu yazar. Göreli import ise bulunduğunuz pakete göre nokta işaretiyle yol verir. Göreli import yalnızca paketin içinden, modül olarak çalıştırılan dosyalarda geçerlidir. Dosyayı doğrudan betik olarak çalıştırırsanız göreli import hata verir.

Bu nedenle uygulamanızın giriş dosyasında mutlak import kullanmak daha güvenlidir. Ayrıca projenizi kurulabilir bir paket haline getirirseniz, import yolu her ortamda aynı kalır. Geliştirme sırasında projeyi düzenlenebilir modda kurmak bunun pratik yoludur; adımlar için Python Packaging User Guide kaynağına bakın.

Kısacası kuralı şöyle özetleyebilirsiniz: giriş noktasını proje kökünden, -m ile çalıştırın; paket içi dosyalarda mutlak import tercih edin.

PYTHONPATH nedir ve ne zaman gerekir?

PYTHONPATH, Python'un modül ararken bakacağı ek klasörleri belirten bir ortam değişkenidir. Python önce çalışan betiğin klasörüne, sonra bu değişkendeki klasörlere, en sonda da standart kütüphane ve site-packages klasörlerine bakar. Değişkene eklediğiniz klasör, import yoluna girer.

Yine de ilk çözüm olarak PYTHONPATH önermiyoruz. Çünkü bu ayar bilgisayara bağlıdır ve başka bir makinede ya da CI'da eksik kalır. Böylece kod sizde çalışır, ekip arkadaşınızda çalışmaz. Önce paket yapısını düzeltin; ardından projeyi kurulabilir hale getirin.

Geçici bir deneme için değişkeni yalnızca o komutta tanımlayabilirsiniz. Bu, kalıcı bir ayara dönüşmediği için daha az riskli bir yoldur. Yolun gerçekten eklendiğini görmek için python -c "import sys; print(sys.path)" komutunu çalıştırın ve listeyi okuyun.

Özetle PYTHONPATH bir yama gibi düşünülmelidir. Gerçek çözüm, projeyi doğru yapıda kurmak ve ModuleNotFoundError hatasını kaynağında önlemektir. Böylece her ortamda aynı biçimde çalışır.

Docker ve CI ortamında ModuleNotFoundError neden çıkar?

Bu ortamlar boş bir sayfadan başlar. Bilgisayarınızda elle kurduğunuz her paket, imajda ya da CI çalıştırıcısında yoktur. Bu yüzden yerelde çalışan kod, kurulum adımında hata alabilir. Bu durum için çoğu zaman gereksinim dosyası eksiktir.

  • Gereksinim dosyası güncel değil; yeni eklenen paket dosyaya yazılmamış.
  • İmaj oluşturulurken kurulum adımı, kodun kopyalanmasından önce ya da sonra yanlış sırada çalışıyor.
  • İmajda birden fazla Python bulunuyor ve komut başka birini çağırıyor.
  • Çalışma dizini farklı olduğu için proje içi import bulunamıyor.
  • CI önbelleği eski bir ortamı geri yüklüyor.

Çözüm için gereksinimleri dosyaya yazın: python -m pip freeze > requirements.txt. Sonra imajda python -m pip install -r requirements.txt çalıştırın. Konteyner mantığına yeni iseniz Docker nedir rehberimiz temel kavramları anlatıyor.

Not: Güvenlik açısından gereksinim dosyalarınızı gözden geçirin ve paketleri yalnızca bildiğiniz kaynaklardan kurun.

Belirti, neden ve çözüm tablosu nasıl okunur?

Aşağıdaki tablo, gördüğünüz belirtiyi olası nedene ve ilk çözüm adımına bağlar. En olası neden üstte yer alır.

BelirtiOlası nedenİlk çözüm
Paket yeni kuruldu ama import başarısızKurulum başka Python'a gittipython -m pip install ile yeniden kurun
Terminalde çalışıyor, editörde hata veriyorEditör farklı yorumlayıcı kullanıyorEditörde ortamı seçin
Terminalde çalışıyor, defterde hata veriyorÇekirdek farklı Python'a bağlıÇekirdeği değiştirin ya da deftere kurun
Ortam açıkken bile hata sürüyorOrtam etkin değil ya da bozukEtkinleştirin, gerekirse ortamı yeniden oluşturun
pip show doğru, import yanlışDosya adı gölgeleme yapıyorKendi dosyanızı yeniden adlandırın
Kendi modülünüz bulunamıyorYanlış dizinden çalıştırmaKökten -m ile çalıştırın
Göreli import hatasıDosya betik olarak çalışıyorMutlak import kullanın
Yalnızca Docker ya da CI'da hataGereksinim dosyası eksikDosyayı güncelleyin, imajı yeniden kurun

Bir sunucuda ya da uzak makinede çalışırken ne değişir?

Sunucuda Python sürümü, kurulu paketler ve ortam değişkenleri sizin bilgisayarınızdan farklıdır. Kodu sunucuya kopyalayıp çalıştırdığınızda, yerelde sorunsuz olan import hata verebilir. Önce sunucuda hangi Python'un çağrıldığını doğrulayın.

Uzak makineye bağlanırken kimlik doğrulama sorunları yaşıyorsanız, ayrı bir konu olan SSH publickey hatası yazımıza bakın. Sunucuda zamanlanmış görev ya da servis olarak çalıştırırken de ortam farklı olabilir. Çünkü servisler, etkin ortamınızı otomatik devralmaz; Python yolunu tam olarak belirtmek gerekir.

Benzer bir ortam karmaşasını Node.js tarafında da görürsünüz. Bağımlılık çakışmaları için npm ERESOLVE rehberimiz, bellek sınırı için JavaScript heap hatası yazımız yardımcı olur.

Bu hatayı ImportError ve benzerlerinden nasıl ayırırsınız?

Mesajın başındaki sınıf adı yol gösterir. ModuleNotFoundError, modülün hiç bulunamadığını söyler. ImportError ise modül bulunmuş ama istenen ad içinden alınamamıştır. Bunların çözümü farklıdır.

  • ModuleNotFoundError: modül yolda yok; kurulum, ortam ya da dosya yapısına bakın.
  • ImportError (cannot import name): modül var ama istediğiniz ad yok; sürüm uyumsuzluğu ya da döngüsel import olabilir.
  • AttributeError: modül yüklendi ama özellik yok; çoğu zaman gölgeleme belirtisidir.
  • pip bağımlılık çakışması: kurulum aşamasında oluşur, import aşamasında değil.

Yani önce sınıf adını okuyun, ardından uygun bölüme gidin. Bu küçük ayrım, yanlış yönde vakit kaybetmenizi önler.

Özellikle döngüsel import durumunda mesaj yanıltıcı olabilir. İki modül birbirini içe aktarıyorsa, ModuleNotFoundError değil ImportError görürsünüz. Ancak kök neden yine yapı sorunudur ve ortak kodu üçüncü bir modüle taşıyarak çözersiniz.

Python sürümü ya da kurulum biçimi paketi neden görünmez kılar?

Bazen paket kurulur ama aktif Python onu yükleyemez. Paketin desteklediği Python sürümü ile sizin kullandığınız sürüm uyuşmuyor olabilir. Bu durumda pip genellikle kurulum sırasında uyarı verir; ancak uyarı terminal çıktısında kolayca gözden kaçar.

Kurulum çıktısını baştan sona okuyun. Başarı mesajı ile kısmi hata mesajı aynı çıktıda görünebilir. Bu yüzden son satıra bakıp geçmeyin. Resmî sürüm uyumluluğu bilgisini her paketin kendi sayfasında bulursunuz; sürüm numarası yazmıyoruz, çünkü bu bilgi sık değişir.

Bir başka olasılık, kurulumun kullanıcı klasörüne yapılmasıdır. Yetki sorunu yaşadığınızda bazı sistemler paketi kullanıcıya özel bir klasöre kurar. Sanal ortam kullanmak bu karmaşayı ortadan kaldırır, çünkü ortam kendi klasörüne yazar ve yetki sorunu çıkarmaz.

Conda ya da başka bir paket yöneticisi kullanıyorsanız ne değişir?

Conda gibi araçlar kendi ortamlarını ve kendi Python'larını getirir. Böyle bir ortamda pip ile conda aynı paketi farklı yerlere kurabilir. Sonuçta paket iki yerde görünür ama aktif ortam yalnızca birini kullanır.

Kural basittir: bir ortamda tek yöneticiyi ana yönetici seçin. Paketi önce o yöneticiyle kurmayı deneyin. Bulunamıyorsa pip'i, aynı ortamın içinde ve python -m pip biçiminde çağırın. Böylece iki sistemin birbirinden habersiz kurulum yapması önlenir.

Yine de ortamınız karışmışsa en temiz çözüm, yeni bir ortam oluşturup gereksinim dosyasından yeniden kurmaktır. Bu işlem birkaç dakika sürer ve saatler süren tahmin yürütmeden daha ucuzdur.

Kurulum başarılı göründüğü halde import neden hâlâ başarısız olur?

Bu durum kafa karıştırıcıdır, ama sınırlı sayıda nedeni vardır. Kurulum çıktısı başarı gösterir, pip show paketi listeler, import yine de çalışmaz. Önce şu üç olasılığı sırayla eleyin.

  • Terminalde kurduğunuz ortam ile kodu çalıştıran ortam farklıdır.
  • Çalışan oturum paketten önce başlamıştır; Jupyter ya da etkileşimli kabuk yeniden başlatılmamıştır.
  • Aynı adlı yerel dosya paketi gölgelemektedir.

Ardından kurulu paketin gerçekten içe aktarılabilir bir modül içerip içermediğine bakın. Bazı dağıtımlar yalnızca komut satırı aracı kurar ve import edilebilir bir modül sunmaz. Paketin resmi belgesi bunu açıkça yazar.

Son olarak önbelleği ve eski dosyaları kontrol edin. Eski bir kurulumdan kalan yarım klasör, yeni kurulumu gölgeleyebilir. Ortamı temiz bir şekilde yeniden oluşturmak bu durumu kesin olarak ortadan kaldırır.

Test çalıştırıcısında ModuleNotFoundError neden yalnızca testlerde görünür?

Test araçları kendi çalışma dizinini ve import kurallarını kullanır. Kodunuz uygulamada çalışırken testte kendi modülünüz bulunamayabilir. Çünkü test dosyası farklı bir klasörde durur ve proje kökü import yoluna girmemiştir.

Örnek senaryo: tests klasöründeki bir dosya uygulama paketini içe aktarıyor, ama proje kökü yolda yok. Çözüm olarak projeyi geliştirme modunda kurmak en temiz yöntemdir. Böylece paket her yerden aynı adla bulunur ve yol ayarı gerekmez.

Test aracının kendi ayar dosyası da yol ekleyebilir. Ancak bunu yalnızca proje yapısı gerçekten gerektiriyorsa kullanın. Aksi halde sorun gizlenir ve CI'da başka biçimde geri döner.

Hata devam ediyorsa destek için hangi bilgileri toplamalısınız?

Birine yardım için yazacaksanız eksiksiz bilgi vermek çözümü hızlandırır. Aşağıdaki bilgiler, sorunu birkaç dakikada teşhis etmeyi sağlar.

  1. Traceback'in tamamını, kısaltmadan kopyalayın.
  2. Çalıştırdığınız komutu ve hangi klasörden çalıştırdığınızı yazın.
  3. python -c "import sys; print(sys.executable)" çıktısını ekleyin.
  4. python -m pip --version çıktısını ekleyin.
  5. Sanal ortam, Docker, CI ya da not defteri kullanıp kullanmadığınızı belirtin.
  6. Proje klasörünün kısa bir ağaç görünümünü paylaşın.

Bu bilgiler kişisel veri içermemelidir. Paylaşmadan önce yollardaki kullanıcı adlarını ve gizli anahtarları silin. Ayrıca örnek paylaşırken yalnızca hatayı yeniden üreten en küçük kodu gönderin. Bu hem okumayı kolaylaştırır hem de gizli bilgilerin sızmasını önler.

Kalıcı önlem için hangi alışkanlıkları edinmelisiniz?

Hatayı bir kez çözmek yeterli değildir; tekrarlanmasını önlemek gerekir. Aşağıdaki alışkanlıklar, ekibimizin sahada en sık önerdiği önlemlerdir.

  1. Her proje için ayrı bir sanal ortam oluşturun ve sistem Python'una paket kurmayın.
  2. Paketleri her zaman python -m pip ile kurun.
  3. Bağımlılıkları gereksinim dosyasında tutun ve her yeni paketten sonra güncelleyin.
  4. Dosyalarınıza standart kütüphane adlarını vermeyin.
  5. Projenizi kökten, -m ile çalıştırın.
  6. Editör ve not defteri ayarlarını projenin ortamına sabitleyin.
  7. Docker ve CI betiklerinde Python sürümünü açıkça yazın.

Bu yedi madde, sahada gördüğümüz ModuleNotFoundError vakalarının büyük çoğunluğunu önler. Bu bir istatistik değil, deneyime dayalı bir gözlemdir. Git ile çalışıyorsanız ortam klasörünü sürüm kontrolüne eklemeyin; yalnızca gereksinim dosyasını ekleyin. Temel komutlar için Git ve GitHub rehberimize bakabilirsiniz.

Teşhis sırasında hangi kontrol listesini kullanmalısınız?

Takıldığınızda aşağıdaki listeyi baştan sona gözden geçirin. Her madde bir evet ya da hayır cevabı verir.

  • Modül adını doğru yazdınız mı, büyük küçük harf dahil?
  • Çalışan Python ile pip aynı yorumlayıcıya ait mi?
  • Sanal ortam etkin mi?
  • Editörün ve defterin yorumlayıcısı ortamla aynı mı?
  • Kurulum adı ile import adı eşleşiyor mu?
  • Klasörde modülle aynı adlı bir dosya var mı?
  • Kodu proje kökünden mi çalıştırıyorsunuz?
  • Docker ya da CI için gereksinim dosyası güncel mi?

Günlük çıktılarını incelemeniz gerekirse, ücretsiz log analizi aracımız sunucu günlüklerini okumanıza yardımcı olur.

Listeyi yazdırıp masanızda tutmanızı öneririz. Çünkü ModuleNotFoundError çoğu zaman aynı birkaç nedenle geri gelir. Dolayısıyla alışkanlık haline getirdiğinizde sorun birkaç dakikada çözülür.

Projenizde ortam yönetimini birlikte kurmak ister misiniz?

Hata tek seferlik ise yukarıdaki adımlar yeterlidir. Ancak ekibinizde herkesin farklı makinesi varsa, ortam tutarsızlığı sürekli zaman kaybettirir. Bu durumda bağımlılık yönetimi, kurulum betikleri ve dağıtım adımları birlikte düzenlenmelidir.

Böyle bir iş için Talha Aslan ve ekibi olarak özel yazılım geliştirme hizmetimiz var. Projenizin durumunu anlatıp özel yazılım geliştirme sayfamızdan teklif isteyebilirsiniz. Kapsamı projenize göre birlikte belirleriz; sonuç garantisi vermeyiz, ancak teşhisi ve kurulumu düzenli bir sırayla yürütürüz.

Sıkça Sorulan Sorular

ModuleNotFoundError hatası neden pip install yapmama rağmen çıkar?
Çünkü pip, kodu çalıştıran Python'dan farklı bir yorumlayıcıya kurulum yapmış olabilir. Birden çok Python, etkin olmayan sanal ortam ya da farklı bir editör ayarı bunun tipik nedenleridir. Çözüm olarak paketi python -m pip install komutuyla kurun ve sys.executable çıktısıyla çalışan Python'u doğrulayın.
python -m pip ile pip arasındaki fark nedir?
python -m pip, pip'i o anda çağırdığınız Python yorumlayıcısı üzerinden çalıştırır. Düz pip komutu ise yolunuzdaki ilk pip'i bulur ve bu başka bir Python'a bağlı olabilir. Bu nedenle python -m pip kullanmak, kurulum ile çalıştırmanın aynı ortamda olmasını güvence altına alır.
Sanal ortam etkinken bile hata alıyorsam ne yapmalıyım?
Önce sys.executable çıktısının ortam klasörünüzü gösterdiğini doğrulayın. Gösteriyorsa paketin o ortamda kurulu olduğunu pip show ile kontrol edin. Ardından kendi dosyanızın modülü gölgelemediğine bakın. Hâlâ çözülmediyse ortamı silip gereksinim dosyasından yeniden oluşturmak çoğu zaman en temiz yoldur. Bu adımlar sırayla ilerler.
Jupyter'de ModuleNotFoundError alıp terminalde almamamın nedeni nedir?
Jupyter çekirdeği, terminalde etkin olan ortamdan bağımsız, kendi Python kurulumuna bağlıdır. Dolayısıyla paketi bir ortama kurmak defteri etkilemez. Defterde sys.executable çıktısına bakın, doğru çekirdeği seçin ya da defterin içinde percent pip install komutunu kullanın. Kurulumdan sonra çekirdeği yeniden başlatın.
PYTHONPATH ayarlamak iyi bir çözüm müdür?
Genellikle ilk tercih olmamalıdır. PYTHONPATH makineye bağlı bir ayardır ve başka bilgisayarda ya da CI ortamında eksik kalır. Daha sağlam çözüm, proje yapısını düzeltmek, dosyaları modül olarak çalıştırmak ve gerekirse projeyi kurulabilir paket haline getirmektir. PYTHONPATH yalnızca geçici deneme için uygundur. Kısacası kalıcı ayar yapmayın.
Docker içinde bu hatayı nasıl önlerim?
Bağımlılıklarınızı gereksinim dosyasında tutun ve imaj oluştururken bu dosyadan kurulum yapın. Python sürümünü imajda açıkça belirtin ve kurulumu kodu kopyalamadan önce çalıştırın. Çalışma dizinini doğru ayarlayın. Her yeni paketi dosyaya eklemeyi unutursanız yerelde çalışan kod konteynerde ModuleNotFoundError verir. Böylece ortam her çalıştırmada aynı olur.
  • python hata
  • modulenotfounderror
  • no module named
  • pip install
  • venv
  • python import
  • jupyter kernel
Paylaş:
Talha Aslan

Google Partner dijital pazarlama uzmanı. 2012’den beri SEO, Google Ads, web tasarım ve e-ticaret projelerinde sahada; bu blogda gördüğünüz her yazı o deneyimden çıkar.

Sıradaki proje

Projeniz için teklif alın.

Talebiniz doğrudan Talha Aslan ve ekibine ulaşır: stratejiyi Talha kurar, uygulamayı deneyimli ekip yürütür. Aynı gün dönüş yapar, kapsamı, takvimi ve tutarı yazılı teklifle 1 iş günü içinde göndeririz.