Bir modülün veya paketin python3'te kurulu olup olmadığını nasıl kontrol edebilirim?


10

Programın çalışabilmesi için kurulup kurulmadığını doğrulamanız gerekir.


2
Sadece çalıştırın pip install. Zaten kuruluysa, tekrar kurmaz.
jordanm

Thnk size jordanm, ama ben kontrol ve ao / p sonra test vermek gerekir.
hubatrix

Yanıtlar:


3

Kabuğunda yazın: pydoc modules.
Bu modülleri listeleyecektir ve istediğiniz modülü grep edebilirsiniz. Burada
stackoverflow üzerinde bulundu


11

Sen kullanmalıdır pip'ın listtek listeleri (hepsi değil modülleri ve bunların komşuları yanı) paketleri yüklü olduğu, grep ile komutu:

pip list | grep -F package_name

Package_name birden fazla kurulu paketle eşleşiyorsa, örneğin botone zaman botocorekurulduğunu da aramak , @TaraPrasadGurung'un önerdiği gibi -wbunun yerine kullanmak -Fyardımcı olabilir. Bu, -wpaket adlarında ortak olan karakterleri sözcük sınırları olarak gördüğünden tam paketi listelemez . Eğer varsa requestsve requests-cacheyüklediyseniz veya ruamel.yamlruamel.yaml.cmd` ve tam olarak bir çıkış hattına ihtiyacınız varsa, aşağıdaki gibi bir şey yapmanız gerekir:

pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "

.Kullanırken herhangi bir karakterle eşleştiğinden -E, kaçmanız gerektiğini lütfen unutmayın.


¹ Ve evet, bir paket olduğu için bu gerekli ruamel_yaml. pipAd alanı paketleriyle uğraşırken her paket yöneticisi uyumlu değildir.


Buradaki sorun, paket adı boto ve botocore kurulu ise, her ikisini de listeleyecektir. Bu yüzden daha iyi bir çözüm, tam paketi listelemek için -F yerine -w bayrağı kullanmak olacaktır
Tara Prasad Gurung

@TaraPrasadGurung Bu, çıktıyı bir miktar azaltmaya yardımcı olsa da, iddia ettiğiniz gibi tam paketi almanıza yardımcı olmaz. Nokta ve kısa çizgi -wkelime sınırları olarak alınır ve paket adlarında yaygındır. grep -w ruamel.yamlYa dagrep -w request
Anthon'u

pip list | grep -F mxnet-cu101yazdırır mxnet-cu101 1.5.0, ancak tam olarak kurulduğu yere değil. yüklü yolu almak için herhangi bir fikir? `
Anu

@ Herhangi Evet, adını bildiğim halde bir Python paketinin nereye kurulacağı konusunda iyi bir fikrim var. Bu sitede bir soru yayınlamalı ve U&L ile ilgili yeni gönderilen soruları takip etmediğim için dikkatimi çekmek için bana ping atmalısınız.
Anthon

4

Paket içe aktarmada çılgınca veya zaman alıcı bir şey yapmazsa, içe aktarmayı gerçekten deneyebilirsiniz:

if python -c "import package_name" &> /dev/null; then
    echo 'all good'
else
    echo 'uh oh'
fi

2

Mevcut cevapların eksik olduğunu ve yeterince iyi örneklerin bulunmadığını tespit ettim. İşte çözdüğüm çözüm:

# an example checking if the pandas package is installed
if python -c 'import pkgutil; exit(not pkgutil.find_loader("pandas"))'; then
    echo 'pandas found'
else
    echo 'pandas not found'
fi

Bu örneğin bir Github özeti burada bulunabilir: https://gist.github.com/shaypal5/d505af9953cd86f59c750fa600ee4ba6



1
Bash kodu benzerdir, Python kodu farklıdır, bu da oldukça fark yaratır. Kendi cevaplarımı eklemeyi seçmeden önce var olan tüm cevapları okudum ve bağlandığınız belirli cevap benim için çalışmadı. Böylece cevabımı buraya eklemeyi alakalı ve değerli buluyorum. :)
ShayPal5

1

Komut dosyalarınızda böyle bir şey de kullanabilirsiniz.

python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"

Bir paket kurulu olmadığında ne alacaksınız.

Package=psutil
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
1

Bir paket kurulduğunda ne alacaksınız.

Package=requests
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
0

Python2 ve python3'te çalışır ve sonra çıkış koduna göre yüklersiniz.


0

Bir komut dosyasında kullanmak için Anthon'un cevabının biraz daha katı bir sürümünü kullandım:

pip3 list |
    grep -v "^Package *Version$" | grep -v "^-*$" |
    cut -d ' ' -f 1 |
    grep -xF "$package_name"

İlk iki açılma, başlık hatlarını pip3'ün çıkışından ayırmak için tasarlanmıştır.

Daha sonra kesim yalnızca paket adlarını seçer (sürüm numaralarını atarak).

Daha sonra son grep, ilgili $package_name

Paket bulunursa, paket adını görüntüler ve çıkış kodu 0 ile döner. Paket adını görmek istemiyorsanız, komutu sonlandırın. >/dev/null



0

Pip3 ile test edilmiştir:

$> pip3 show MODULENAME

Modülün kurulu olması durumunda çıkış kodu ($?) "0", aksi takdirde "1" olur.

Grepping'in "yanlış pozitifler" sorunu vardır:

pip list | grep NAME

adında "NAME" bulunan herhangi bir modülde eşleşir, örneğin "some_other_NAME" ile eşleşir.

Süre

pip3 show MODULENAME

sadece tam maçlarda eşleşir.

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.