Bir modülün Python'da kurulu olup olmadığını nasıl kontrol edebilirim ve gerekirse kurabilirim?


89

Terminalde Python'u başlattıktan sonra python'da hangi modüllerin bulunduğunu nasıl öğreneceğim? NumPy ve SciPy modüllerini öğrenmem gerektiğini varsayalım.

  • Takılı değilse nasıl kuracağım?
  • Yüklü olup olmadığını nasıl bileceğim?

Yanıtlar:


73

Sistemde bir python modülünün kurulup kurulmadığını bilmek: Terminalde çok kolay bir test yapabilirsiniz.

$ python -c "import math"
$ echo $?
0                                # math module exists in system

$ python -c "import numpy"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named numpy
$ echo $?
1                                # numpy module does not exist in system

Takılı değilse nasıl kuracağım

Sen deposundan gelen paketleri indirerek belirli modülünü yükleyebilir, örneğin yapabilirsiniz yüklemekscipy gibi

sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3

Alternatif Ayrıca kullanarak bir piton modülü yükleyebilirsiniz python-pipiçinde Zack Titan önerdiği gibi aşağıdaki açıklama , yüklemek için numpykullanabileceğiniz

pip install numpy

Uyarı: Python modüllerini yalnızca resmi Ubuntu deposu kullanarak kurmanız ve pipyöntemi süper kullanıcı olarak kullanmamanız (örneğin, rootkullanmanız veya kullanmanız sudo) önemle tavsiye edilir . Bazı durumlarda sistem pythonunu kırarak sisteminizi kullanılamaz hale getirebilir.

pipYerel sanal ortama kullanarak paketler nasıl kurulur ?


Cevabınız gibi matematik modülü var ve uyuşukluk için geri izleme görünmedi ve echo $ için? çıkış 0 idi, sistemimde numpy'nin de var olduğu anlamına mı geliyor?
TechJhola

1
evet, sisteminizde var.
souravc

Modül numpy sahip değilseniz, nasıl alırsınız? Kodlamayı yaptığımızda, import deyimini numpy import * ile çağırırız, modülü yükler mi? Yoksa nasıl yeni bir modül kuracağız?
TechJhola

1
Bir modülün nasıl kurulacağı ayrı bir soru olacaktır. Farklı modül için farklı paketlere ihtiyacınız var. Örneğin, yüklemek vpythoniçin yüklemeniz gerekirsudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
souravc

1
kullanmayın sudo pip; sistem pitonunu kırabilir. Sistem python paketlerini kurmak için apt-get komutunu kullanın. pip --userPython paketlerini kendiniz yüklemek için seçeneği veya virtualenv kullanabilirsiniz .
jfs

21

İstenmeyen bir şekilde söz konusu bir modülü içe aktarmak istemiyorsak (ki bu bir tryaçıklamada olur) sys.modules, daha önce kurulmuş ve alınmış olan modülleri test etmek için kullanabiliriz .

Python kabuğu sayısında:

>>> import sys

Ardından kurulu modülleri test edin:

>>> 'numpy' in sys.modules
True
>>> 'scipy' in sys.modules
False

Yalnızca Truebu sınamadan önce ithal edilen modüllerin , diğer tüm modüllerin (takılı olsa bile) sonuç verdiğini unutmayın .False.

Python konsolundaki trybir importifadeye başka bir alternatif dahili help()işlev çağırıyor . Bu, kurulu olmayan modüller için bir dokümantasyon vermeyecektir, örneğin

>>> help('scipy')
no Python documentation found for 'scipy'

Kurulu modüllerin çok uzun yardım belgelerinin çıktısı ile kesilebilir Q.

Şimdi eksik modülleri kurmak için Ubuntu paket yönetimini (Python pip yolu değil) kullanmanız önerilir çünkü kök erişimine ihtiyacımız var ve aynı zamanda yoğun Python bağımlı sistemimizi bozmayı da önlüyoruz. Söz konusu modül için bu, örneğin:

sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3

Yüklemeden sonra, sys.modulessözlüğe bir kez alarak bunları ekleyebiliriz .


1
Bunun en Pythonic cevabı olduğunu düşünüyorum ....
Grijesh Chauhan

3
Bunun ilk kısmı yanlıştır: sys.modulessadece zaten alınmış olan modülleri içerir , bu yüzden bir modülün kurulu olup olmadığını test etmek güvenilir bir yöntem değildir. En güvenilir test, bazılarının daha önce önerdiği gibi, try/excepta'yı kullanmak ve tuzağa düşürmektir ImportError.
ekhumoro

@ekhumoro - teşekkürler, bunu daha net hale getirmek için cevabımı düzenleyeceğim.
Takkat

4
Hala yeterince net görünmüyor. Sorunun bir modülün kurulup kurulmadığını ( ithal edilmediğini ) nasıl sorduğunu sorduğumuza bakıldığında sys.modules, tamamen alakasız ve bence bunun yanıltıcı olduğunu düşünüyorum. Ama belki bu sadece benim.
David Z,

1
sys.modulesburada herhangi bir yardım değil.
Kedi,

19

Başka bir yol ise pkgutilmodül. Her iki Python 2 ve 3 ile çalışır:

python -c 'import pkgutil; print(1 if pkgutil.find_loader("module") else 0)'

moduleModülünüzün adı ile değiştirmeniz gerekir , örneğin:

$ python -c 'import pkgutil; print(1 if pkgutil.find_loader("math") else 0)'
1

2
Seni bazı değişikliklerimin paylaştığını gördüm; print()Python 2'de de iyi çalışacak; Grup-parens sözdizimi olarak kabul edilir ve herhangi bir yan etkisi yoktur. Yalnızca birden fazla öğe eklemek istediğinizde (içinde print('a', 'b')olduğu gibi, buna tupleihtiyacınız olan bir işlem olarak kabul edilir from __future__ import print_function, ancak bu durumda geçerli değildir, yalnızca parenler ekleyerek ileriye dönük kod yazabilirsiniz (Değişikliklerimi test ettim) Python 2 ve 3'te)
Martin Tournoij

@Carpetsmoker: Gösterdiğiniz için teşekkürler. Eski sürüme geri dönüyorum.
cuonglm

Bu harika bir cevap. Bir çıkış / durum kodu döndüren (kabuk komut dosyası akış kontrolü için) ve modül adını komut satırı argümanı olarak alan bir türevsel cevap ekledim. askubuntu.com/a/891384/146273
Bruno Bronosky

İşe yaradı! - Sadece şu şekilde değiştirin exit: kabuk bağlamında kullanılabilir:python -c 'import pkgutil; exit(0 if pkgutil.find_loader("math") else 2)'
AT

12

OP'nin Python'u başlattıktan sonra başlangıçta bir çözüm istediğini biliyorum, ancak kullandığım python dışında pip. Ubuntu'da: sudo apt-get install python-pipeğer önceden kurulmamışsa.

Sonra hangi üçüncü taraf modüllerin mevcut olduğunu görmek için hemen çalıştırın:

pip freeze

Ya da

pip list

Her ikisi de size yüklü olan tüm modülleri ve sürümlerini gösterecek.

Aradığınız modül kurulu değilse, çoğu zaman pip ile kolayca kurabilirsiniz:

pip install <module-name>

Bir modülün var olup olmadığından veya PyPI adının ne olduğundan emin değilseniz, şunu kullanın pip search:

pip search <keyword>

1
Ayrıca pip show <module-name>bir paketin kurulup kurulmadığını gösterecektir, örn pip show numpy.
Herpes Serbest Mühendisi

10

İçinde kodu koyabilirsiniz try, exceptblok.

$ python3 -c "\
try:
    import cow  
    print('\nModule was installed')
except ImportError:
    print('\nThere was no such module installed')"

There was no such module installed

$ python3 -c "\
try:
    import regex
    print('\nModule was installed')
except ImportError:
    print('\nThere was no such module installed')"

Module was installed

6

Tamamlama uğruna başka bir cevap vermek için:

(Ab) -mseçeneğini kullanabilirsiniz . Python'un sayfasından:

   -m module-name
          Searches sys.path for the named module and runs the  correspond
          ing .py file as a script.

Hangi bize verecek:

$ python2 -m numpy
/sbin/python2: No module named numpy.__main__; 'numpy' is a package and cannot be directly executed

$ python2 -m math
/sbin/python2: No code object available for math

Ancak var olmayan modüller için bize şunları verecektir:

$ python2 -m doesnt_exist
/sbin/python2: No module named doesnt_exist

Bununla grepeşleşmek için kullanabiliriz :

$ python2 -m doesnt_exist |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Nope

$ python2 -m math |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Yup

Bu biraz hack-ish ve -mamaçlanan şey değil ; ancak hızlı bir test yapmak istiyorsanız en az yazmayı gerektiren yöntem :-)


4
grep -qyeniden null gereksiz gereksiz hale getirir.
muru

3
@muru Yikes! /dev/nullYıllar boyunca birçok yararsız yönlendirmeler
yazdım

4

Python'da bir örnek yazdım:

import pip
import sys
from bigml.api import BigML


if not 'bigml' in sys.modules.keys():
    pip.main(['install', 'bigml'])

3

Shell oneliner kontrolü (sağlama için yararlıdır)

Altyapı tedariğimi kusursuz kılmak için oneliner'daki bir paketi kabuktan kontrol edebilmem gerektiğini öğrendim. @ Cuonglm'ın cevabı üzerine inşa ettim. Ben ters vardı 1ve 0ben çıkış durumları üreten ziyade bir dize yazdırdığımı çünkü.

python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader(sys.argv[1]) else 1)" pymongo

sys.argv[1]Paketinizin tek alıntı adıyla değiştirebilirsiniz , ancak sağlama komut dosyalarım için sonunda okunabilirliğini seviyorum.

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

** Şef , kukla ve arkadaşlarının hepsinin python paketlerini yönetmek için eklentileri olduğunu fark ettim ;


1

Bir de belirli bir modül bulmak için pydoc modulesile filtre edilebilir kullanabilirsiniz grep. Çıktı sütunlu biçimde görüntülenir. Bu yaklaşımın tek dezavantajı, geçerli çalışma dizininde python dosyalarını da içermesidir. Yine de, çoğu zaman kendim kullanıyorum ve bu konuyla ilgili son derece alıntılanmış yaklaşımlardan biri: https://stackoverflow.com/q/739993/3701431


0

Ubuntu Kabuğundan, varsayılan bash, olduğu kadar basit

pip list | grep <package-name-Case-Matters>

Örnekler

pip list | grep pywinrm

pip list | grep numpy

Ayrıca, durumla ilgili şüpheleriniz varsa (tüm paket adlarının her zaman küçük harf olduğunu düşünüyorum):

pip list | grep [Nn]um[Pp]y  # it works with numpy, Numpy, numPy, and NumPy

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.