Visual Studio Code'da Pylint "çözülmemiş içe aktarma" hatası


127

Aşağıdaki kurulumu kullanıyorum

  • macOS v10.14 (Mojave)
  • Python 3.7.1
  • Visual Studio Code 1.30
  • Pylint 2.2.2
  • Django 2.1.4

Visual Studio Code'da hayatımı biraz daha kolaylaştırmak için linting kullanmak istiyorum. Ancak, her ithalat için "çözümlenmemiş ithalat" durumlarım var. Varsayılan Django içe aktarmalarında bile (yani django.db içe aktarma modellerinden).

Sanırım, sanal ortam Python dosyalarını görmediğinden.

Her şey yolunda gidiyor, ancak can sıkıcı olmaya başlıyor.

Sahip olduğum yorumlayıcı seçenekleri Python'un tüm sistem sürümleri. Sanal ortamım Python'u hiç görmüyor gibi görünüyor (çalışma alanımla aynı dizinde değil, bu yüzden bu kısım mantıklı).

Ben kurarsanız python.PythonPath içinde settings.json dosyası, sadece onu yok sayar ve bir seçenek olarak benim sanal çevre yolunu listelemiyor. Ayrıca global Python ayarlarımda da kurmayı denedim, ancak görünmüyor.

Çalışması için hızlı bir düzeltme var mı?


2
pip install pylint-django, ardından vs kod ayarlarına şunu ekleyin:"python.linting.pylintArgs": [ "--load-plugins=pylint_django", ],
Vaibhav Vishal

@VaibhavVishal ne yazık ki, yine de aynı sonuçları alıyorum (settings.json
dosyama ekledim

2
Aslında, yeniden başlatıldıktan sonra içe aktarma paketini çok geç algılayan bir VScode problemi, otomatik olarak düzeltiliyor.
Anupam Haldkar

Yanıtlar:


106

Çalışma alanı ayarlarınızda , Python yolunuzu şu şekilde ayarlayabilirsiniz:

{
    "python.pythonPath": "/path/to/your/venv/bin/python",
}

28
Bu tür işler. Python'a özgü içe aktarmalar için, bunları şimdi çözer, ancak kendi modellerimi çözmez (yani, "users.models import User" hala çözemiyor diyor). Bunun üzerine düşünceler?
jAC

7
Emin değil. Lütfen vs kodunun penceresini (kabuktan code <project_directory> -r) yeniden yüklemeyi deneyin veya sadece vscode'u yeniden başlatın.
ruddra

5
Emin değilim, bazen çalışma alanı dizini düzgün ayarlanmamışsa ortaya çıkabilir . Lütfen manage.pykökünde olduğundan emin olun workspace. Ayrıca lütfen pilin doğru şekilde yapılandırıldığından
ruddra

3
sen dahi! Bunun nedeni, çalışma alanımın projenin kök düzeyinde başlamamasıydı. Bir kez ayarladığımda işe başladım. Çok teşekkürler!
jAC

1
Çok teşekkürler! Asırlık bir sorunu aşmama yardım etti!

196

Kabul edilen yanıt, kendi modüllerini içe aktarırken hatayı düzeltmez.

Çalışma alanı ayarlarınızda aşağıdaki ayarı kullanın .vscode/settings.json:

"python.autoComplete.extraPaths": ["./path-to-your-code"],

Referans: Sorun Giderme, Çözümlenmemiş içe aktarma uyarıları


4
Karışık bir çalışma alanım var, tüm python kodu bir alt klasörde. Alt klasöre bir .vscode eklemek işe yaramayacaktır, bu çalışan tek çözümdür.
daisy

1
vscode settings.json için en iyi yanıt. (workspace.xml kullanıyorsanız, kabul edilen yanıt doğru olabilir, ancak kesin olarak söyleyemem. Ayrıca karma bir çalışma alanı kullanıyorum) çözüm için çok teşekkürler.
Hiçbiri

3
Cevap bu olmalı.
Richard Li

1
Bu benim için çalıştı! Referans bağlantısı mükemmel bir şekilde açıklıyor. TL; DR; Alt dizinlerde kullanıcı tarafından oluşturulan yerel betikler için, yukarıdaki ayar python yorumlayıcısının alt dizini kendi çalışma alanı olarak tanımasına yardımcı olur. Daha sonra, çalışma alanındaki komut dosyalarını tanımak ve tüm modüller veya tek tek yöntemler içe aktarıldığında içe aktarmaları çözümlemek.
Avid Programmer

3
Herkese merhaba! Çift yıldızın kök dizinin altındaki herhangi bir alt klasör anlamına geldiği her durumda ["./path-to-your-code"] 'un ["./**"] olabileceğini buldum! Bu daha basit bir çözümdür.
alan23273850

59

Alternatif yol: komut arayüzünü kullanın!

Cmd/ Ctrl+ Shift+ PPython: Yorumlayıcı'yı seçin → aradığınız paketlerden birini seçin:

Buraya resim açıklamasını girin


2
benim durumumda bu işe yaramadı ama umarım bu konuda başkalarına yardımcı olur.
jAC

evet, ruh bu, karmaşık bir çözüm değil, benim için olan şey :)
ted

Bu benim için çalıştı. Hiç kimse 2019'da hala merak ediyordu.
Safder

@Safder değil benim için. using virtualenv
dillon.harless

38

Bu sorun zaten GitHub'da açıldı:

Python çözülmemiş içe aktarma sorunu # 3840

MagnuesBrzenk ve SpenHouet tarafından çok faydalı iki cevap var.

Şimdilik en iyi çözüm, proje kök klasörünüzde bir .env dosyası oluşturmaktır. Sonra buna bir PYTHONPATH ekleyin:

PYTHONPATH=YOUR/MODULES/PATH

Ve settings.json sayfanıza şunu ekleyin:

"python.envFile": ".env"

5
Teşekkürler, bu mükemmel çalıştı! "${workspaceFolder}/.env" PYTHONPATH=FolderName
KowaiiNeko

1
Microsoft Python Dil Sunucusu kullanılırken düzenlenebilir yüklemelerle ilgili yaygın bir sorun vardı. Bununla birlikte, şu anda burada açıklanan yeni düzeltmeden sonra görünüyor: github.com/microsoft/python-language-server/issues/… sorun giderildi ve herhangi bir içe aktarma ExtraPaths ile eklenebilir. Daha fazla yardım için bu Sorun Giderme'ye bakın
Tomasz Chudzik

Teşekkürler @TomaszChudzik - Ayar: "python.autoComplete.extraPaths": ["./src"] harika çalıştı!
Robert

Diğer bir çözüm, kod tabanı modüllerinizi virtualenv'inize eklemek ( add2virtualenv YOUR/MODULES/PATHörneğin kullanarak ) ve python yorumlayıcınız olarak bu virtualenv'i seçmektir.
Antwan

20

settings.jsonDosyanızda bu kod varsa , silin:

{
    "python.jediEnabled": false
}

31
Biraz açıklama eklemek daha iyidir.
Tiw

1
Bu satırı düzenlemek, projenizde büyük bir değişikliktir. Satır: "python.jediEnabled": false, eski dil sunucusunu devre dışı bırakır ve yeni Microsoft Python Dil Sunucusunu etkinleştirir. Buraya bakın: github.com/Microsoft/vscode-python/issues/2177 Bence envFile dosyamıza gerekli bağımlılıkları eklemenin çok daha kolay olduğunu düşünüyorum. Başka bir cevapta açıklanmıştır. Yeni Microsoft Python Dil Sunucusu ile intellisense benim için çok daha iyi çalışıyor.
Tomasz Chudzik

Benim için tam tersi, settings.json'da jedi'yi etkinleştirmek benim için çalışıyor. Daha fazlasını burada görün, stackoverflow.com/a/57269144/2877493
nairb

@Tiw özellikle başka bir cevap tam tersini önerdiğinden.
Neinstein



15

Benim gibi daha görselseniz, Visual Studio Code yapılandırmalarını DosyaTercihlerAyarlar ( Ctrl+ ,) menüsünde kullanabilirsiniz . Git UzantılarıPython .

Analysis: Disabled bölümünde aşağıdaki mesajın gizlenmesini ekleyin unresolved-import:

Visual Studio Code ayarları


3
Göreli ithalat için çözümlenmemiş ithalat açıkça yanlıştır, bu ondan kurtulur.
Satya Mishra

9

Sanal ortamla ilişkili yorumlayıcıyı seçmeniz gerekir.

Buraya resim açıklamasını girin

Buraya tıklayın (alt durum çubuğunda):

Buraya resim açıklamasını girin

Ve sadece birlikte çalıştığınız sanal ortamı seçin. Bitti.

Bazen tercüman seçilse bile işe yaramaz. Sadece işlemi tekrarlayın ve çözmesi gerekir.

Buraya resim açıklamasını girin


1
Bu tam olarak benim sorunumdu (Mac'te) ve uygun tercümanı seçmek sorunu çözdü. Teşekkürler!
Mahm00d

7

Bunun dışında hiçbir çözüm işe yaramadı. Settings.json içindeki "Pylance" veya "Microsoft" yerine benimki çözüldü.

"python.languageServer": "Jedi"

6

Bu sorunun kaç çözümü olduğunu (veya bulmadığını) merak ediyorum, yukarıdakilerin çoğunu denedim, hiçbir şey işe yaramadı, işe yarayan tek çözüm python dil sunucusunu settings.json dosyasında Microsoft yerine Jedi olarak ayarlamaktı:

"python.languageServer": "Jedi"

4

Önceki cevapların hiçbiri benim için işe yaramadı. Bununla birlikte, her iki satırı da settings.json dosyama eklemek yaptı.

"python.analysis.disabled": [
    "unresolved-import"
],
"python.linting.pylintArgs": ["--load-plugin","pylint_protobuf"]

İlk satır, tüy bırakma hatasını gerçekten gizler. Kesinlikle kalıcı bir çözüm değil, ancak ekranı dağıtır.

Bu cevap bana ikinci satırı verdi: VS Code PyLint Hatası E0602 (tanımsız değişken) ProtoBuf ile derlenmiş Python Yapısı

Belki Python'u benden daha iyi anlayan biri bunu daha açıklayabilir.


4

Çözümüm

Bu çözüm sadece mevcut proje içindir.

  1. Proje kökünde klasör oluşturun .vscode

  2. Ardından dosyayı oluşturun .vscode/settings.json

  3. Dosyaya setting.jsonsatırı ekleyin (bu Python 3 içindir)

    {
        "python.pythonPath": "/usr/local/bin/python3",
    }
    
  4. Bu Python 2 örneğidir

    {
        "python.pythonPath": "/usr/local/bin/python",
    }
    
  5. Python kurulumunuzun nerede olduğunu bilmiyorsanız, sadece komutu çalıştırın which pythonveya which python3terminalde. Python konumunu yazdıracaktır.

  6. Bu örnek, dockerized Python - Django için çalışır .


4

Benim için sorun, üzerinde çalıştığım projeyle ilgiliydi. Bunu anlamam biraz zaman aldı, bu yüzden umarım bu yardımcı olur:

Orijinal klasör yapısı:

    root/
    __init__.py  # Empty

        folder/
            __init__.py # Empty

            sub_folder_b/
                my_code.py
            sub_folder_c/
                another_code.py

Another_code.py içinde:

from folder.sub_folder_b import my_code.py

Bu, Visual Studio Code'daki intellisense'i tetiklemedi, ancak OK'yi çalıştırdı.

Öte yandan, içe aktarma yoluna "kök" eklemek, intellisense çalışmasına neden oldu, ancak yürütülürken ModuleNotFoundError hatası oluştu:

from root.folder.sub_folder_b import my_code.py

Çözüm, "klasör" dizini içindeki _ init _.py dosyasını kaldırıp, yalnızca _ init _.py'nin konumunda kalmasıydı /root.


3

Shinebayar G'nin çözümü işe yaradı, ancak bu diğeri biraz daha zarif:

Python çözümlenmemiş içe aktarma sorunu # 3840'dan kopyalandı :

Aşağıdaki örnek proje yapısı göz önüne alındığında:

  • workspaceRootFolder
    • .vscode
  • ... diğer klasörler
  • codeFolder

Bu sorunu çözmek için ne yaptım:

  1. Çalışma alanı klasörüne gidin (burada workspaceRootFolder) ve bir .env dosyası oluşturun
  2. Bu boş .env dosyasında, PYTHONPATH = codeFolder satırını ekleyin (codeFolder'ı klasör adınızla değiştirin)
  3. Settings.json dosyasına "python.envFile": "$ {workspaceFolder} /. Env" ekleyin
  4. Visual Studio Code'u yeniden başlatın

2

Bu benim için çalışıyor:

Komut paletini ( Ctrl+ Shift+ P) açın ve "Python: Yorumlayıcı Seç" i seçin.

Bunu yaparak, Python yorumlayıcısını Visual Studio Code'da ayarlarsınız.


benim durumumda. python 2 yorumlayıcım iyi çalışıyor. sadece benim python
3'üm

2

Bunun nedeni, Visual Studio Code'un asıl ana klasörü dikkate almak yerine geçerli klasörünüzü ana klasör olarak görmesidir.

Düzeltmenin hızlı yolu, yorumlayıcı yolunu ana klasöre sağlamaktır.

Diğer sistemlerin çoğunda Command+ Shift+ P(veya Ctrl+ Shift+) tuşlarına basın P.

Tip Python yorumlayıcısı

Mevcut seçeneklerden Python'u kurduğunuz yolu seçin.


2

Python: Dil Sunucusunu 'Jedi' olarak değiştirmek benim için çalıştı. Başlangıçta 'Windows'du.


1

Farklı bir çözümüm var: Visual Studio Code örneğim, içinde depolanan virtualenv'i aldı .venv, ancak yanlış Python ikili dosyasını kullanıyordu. Kullanıyordu .venv/bin/python3.7; mavi durum çubuğundaki değiştiriciyi kullanarak.

Kullanmak için değiştirdim .venv/bin/pythonve tüm ithalatlarım doğru bir şekilde çözüldü.

Bunu yaptığımda Visual Studio Code'un perde arkasında ne yaptığını bilmiyorum ve bunun neden sorunuma neden olduğunu anlamıyorum, ancak bu benim için çalışma alanı ayarlarımı düzenlemekten biraz daha basit bir çözümdü.


0

Bir Pylint hatası durumunda, aşağıdakileri kurun

pipenv install pylint-django

Ardından kök klasörde bir .pylintrc dosyası oluşturun ve aşağıdakini yazın

load-plugins=pylint-django

0

İçe aktarma hatasını Ctrl+ Shift+ ile çözdüm P. "Tercih ayarları" yazın ve seçeneği seçin Tercihler Ayarları Aç (JSON)

Ve çizgiyi ekle "python.pythonPath": "/usr/bin/"

Yani JSON içeriği şöyle görünmelidir:

{
    "python.pythonPath": "/usr/bin/"
}

Varsa diğer yapılandırma satırlarını koruyun. Bu, otomatik tamamlama için PIP kullanarak kurduğunuz tüm modülleri içe aktarmalıdır.


0

Çözümüm, Visual Studio Code'u önceki bir dizinde açmaktı.


"Önceki dizin" ile neyi kastediyorsunuz ? "Ana dizin" mi demek istiyorsun ? Veya başka bir şey?
Peter Mortensen

VSCode'u yalnızca projeden önce bir dizinde konsolla açıyorum
Jeremias Caceres

0

Benim durumumda zaten etkinleştirilmiş bir Conda ortamım vardı , ancak yine de yerel Python modüllerinin otomatik tamamlama, gözetleme tanımı vb. İçin kullanılabilir olmasını istedim.

Python yollarının bir listesi vb. Eklemek gibi birçok çözümü denedim, ancak sonunda benim için çözen şey, Conda'nın lib/python{your version}/site-packagesyerel modülünden sembolik bir bağlantı oluşturmaktı .


0

Jedi dil hizmetini kullanarak dahil etmeye çalışırken hata veren ve onsuz iyi çalışan bir kütüphanem var (yani C # one).

Kitaplık jsonslicer'dır ve yüklediğim harici bir C kitaplığına bağlıdır /usr/local/lib. Bunun bununla bir ilgisi olabilir mi?

Jedi hizmetini ve kütüphaneyi Conda ortamıma kurdum ve bu ortamı Visual Studio içinde kullandım. Çalışma zamanında ve terminalimde iyi çalışıyor, ancak kaynak dosyalarımdaki sorunları kontrol ederken çalışmıyor ve bir hata olarak görünüyor.


0

Öncelikle eklentiyi kurduğunuzdan emin olun, ancak büyük olasılıkla çalışma alanı dizini doğru ayarlanmamıştır. Pylint'i kontrol edin ve alttaki settings.json dosyasını düzenleyin.

{
    "python.pythonPath": "/usr/local/bin/python3",
    "git.ignoreLimitWarning": true
}

"Pylint'i kontrol et" ile ne demek istiyorsun ? Onay kutusu mu? Var mı / kurulu mu? Başka bir şey? Tarafından yanıtla'ya cevap düzenleme yorumlarda burada değil, (ve olmadan "Edit:", "Güncelleme:" veya benzer).
Peter Mortensen

0

Code-runner'ı kurun ve aşağıdaki kodu settings.json klasörüne ekleyin:

    "code-runner.executorMap": {
        "python": "python3 -u",
    }

"python": "(modüller veya yolu ile çalıştırılabilir Python) -u",


"Kod çalıştırıcı" nedir? Buna bir referans ekleyebilir misiniz ( cevabınızı burada yorumlarda değil düzenleyerek )?
Peter Mortensen

0

Bu problemle üç şekilde karşılaştım. Her biri için bu sorunun yanıtlarında bir çözüm bulunmasına rağmen, hepsini bir araya getirmeyi düşündüm.

  1. İlk olarak bazı modülleri içe aktarırken bir "Çözümlenmemiş İçe Aktarma" aldım ve kurulumlarımın sanal ortam yerine global pip'te gerçekleştiğini fark ettim.

    Bu sorun Python yorumlayıcısından kaynaklanıyordu. Shift+ Ctrl+ Kullanarak yorumlayıcıyı Visual Studio Code'da seçmeniz Pve ardından yazmanız gerekir Select Python Interpreter. Venv tercümanınızı buradan seçin .

  2. İkinci sorun şuydu: Yukarıdaki değişiklik sorunumu tamamen çözmedi. Bu sefer dosya settings.json yüzünden oldu . Eğer yoksa settings.json proje dizinine, bir tane oluşturun ve bu işlemi aşağıdaki satırı ekleyin:

        {
            "python.pythonPath": "apis/bin/python"
        }
    

    Bu, temel olarak Visual Studio Code'a, venv'nizdeki Python yorumlayıcısını kullanmasını söyleyecektir.

  3. Üçüncü sorun, özel bir Python modülünü veya başka bir programdaki dosyayı içe aktarırken ortaya çıktı. Bunun için klasör yapısını anlamanız gerekir. Venv'deki Python, bölmenin içinde olduğundan, modülünüzün klasörünü (çoğu zaman uygulama klasörü) belirtmeniz gerekir. Benim durumumda bu oldu app,

        from app.models import setup_db
    

    Sözlü olarak, models.py'den setup_db'yi içe aktarın uygulama klasöründe bulunur.


0

Eğer kullanıyorsanız pipenv, sanal ortamınızın yolunu belirtmeniz gerekir settings.json. Dosyasında. Örneğin :

{
    "python.pythonPath": 
           "/Users/username/.local/share/virtualenvs/Your-Virual-Env/bin/python"
}

Bu yardımcı olabilir.


0

Venv kullanan python 3.8.5 ile aynı problemi yaşıyorum, vscode 1.48.2 çözümümü buldum. (Env klasör) / lib / site-packages içinde paketleri içermez. Bu ayarı kullanıyorum (.vscode / settings.json)

   {
        "python.autoComplete.extraPaths": [
            "./**",
        ],
        "python.pythonPath": "env\\Scripts\\python.exe",
        "python.languageServer": "Microsoft"
   }

0

Birisi benim kadar aptal olursa, aşağıdakiler işe yaradı.

Eski klasör yapısı:

awesome_code.py
__init__.py
    src/
        __init__.py
        stuff1.py
        stuff2.py

Yeni yapı:

awesome_code.py
    src/
        __init__.py
        stuff1.py
        stuff2.py
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.