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

56

Terminalde, Python’a başladıktan sonra, python’da bulunan modüllerin neler olduğunu nasıl anlayacağım? NumPy ve SciPy modüllerini öğrenmem gerektiğini varsayalım.

  • Yüklü değilse nasıl kuracağım?
  • Zaten yüklü olup olmadığını nasıl anlarım?
sordu TechJhola 22.02.2015 04:09

9 cevap

48

Bir python modülünün sistemde yüklü olup olmadığı nasıl bilinir: 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

Yüklenmezse nasıl kurarım

Depodan ilgili paketleri indirerek belirli bir modülü yükleyebilirsiniz. Örneğin, scipy 'yi aşağıdaki gibi yükleyebilirsiniz:

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

Alternatif olarak Ayrıca, tarafından önerilen python-pip 'yi kullanarak python modülünü de yükleyebilirsiniz. aşağıya yorum , numpy yüklemek için

kullanabilirsiniz
pip install numpy

Uyarı: Python modüllerinin yalnızca resmi Ubuntu deposu kullanılarak yüklenmesi ve pip yönteminin süper kullanıcı olarak kullanılmaması (örn.% co_de olarak) önerilir. % veya root kullanılıyor). Bazı durumlarda, sistem pythonunu kırarak sisteminizi kullanılamaz duruma getirebilir.

Yerel sudo kullanarak paketleri yerel sanal ortama nasıl yüklerim.

    
verilen cevap souravc 22.02.2015 04:28
17

Söz konusu bir modülü istenmeyen bir şekilde içe aktarmak istemezsek ( try ifadesinde gerçekleşir), ve yüklü modüllerin test edilmesi için sys.modules 'den yararlanabiliriz daha önce içe aktarıldı.

Python kabuğu sorununda:

>>> import sys

Sonra takılı modülleri test edin:

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

Bu testte yalnızca daha önce içe aktarılan modüllerin True değerini verdiğine, diğer tüm modüllerin (yüklü olsa bile) False.

ile sonuçlandığına dikkat edin.

python konsolunda try % bir co_de% ifadesine başka bir alternatif, dahili import işlevini çağırıyor. Bu, takılı olmayan modüller için bir doküman vermeyecektir, örn.

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

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

Artık eksik modülleri takmak için Ubuntu paket yönetimini kullanmanız önerilir (Python pip yolunu değil) çünkü root erişimine ihtiyacımız var ve ayrıca Python bağımlı sistemimizi ağırlaştırmamızı öneriyoruz. Söz konusu modül için bu, örn. olabilir:

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

Yüklemeden sonra bunları bir kez içe aktararak help() sözlüğüne ekleyebilirsiniz.

    
verilen cevap Takkat 22.02.2015 12:23
14

Başka bir yol pkgutil modülüdür. Python 2 & amp; 3:

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

module 'ı modülünüzün adıyla değiştirmeniz gerekiyor. Örnek:

$ python -c 'import pkgutil; print(1 if pkgutil.find_loader("math") else 0)'
1
    
verilen cevap cuonglm 22.02.2015 20:53
9

Python'u başlattıktan sonra OP için bir çözüm istediğini biliyorum ancak python dışında pip kullanıyorum. Ubuntu'da: Yüklü değilse sudo apt-get install python-pip .

Sonra üçüncü parti modüllerin ne olduğunu görmek için şunu çalıştırın:

pip freeze

Veya hatta

pip list

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

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

pip install <module-name>

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

pip search <keyword>
    
verilen cevap OozeMeister 23.02.2015 03:13
9

Kodu try , except bloğu içine koyabilirsiniz.

$ 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
    
verilen cevap Avinash Raj 22.02.2015 08:56
6

Tamamlanmak için başka bir cevap vermek için:

-m seçeneğini kullanabilirsiniz (ab). Python’un manpage’inden:

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

Bize ne 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 mevcut olmayan modüller için bize şunları verecek:

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

Bunun için grep değerini 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 kesmek-ish, ve -m 'nin amaçlandığı şey değil; ama bu hızlı bir test istiyorsanız en az yazmayı gerektiren yöntem: -)

    
verilen cevap Martin Tournoij 22.02.2015 20:04
2

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'])
    
verilen cevap Mona Jalal 21.10.2016 21:57
1

Belirli bir modülü bulmak için pydoc modules ile filtrelenebilen grep değeri de kullanılabilir. Çıktı, sütunlanmış biçimde görüntülenir. Bu yaklaşımın tek dezavantajı, aynı zamanda mevcut çalışma dizinindeki python dosyalarını da içermesidir. Yine de, çoğu zaman kendim kullanırım ve bu konuyla ilgili en çok atıfta bulunulan yaklaşımlardan biridir: İşte

    
verilen cevap Sergiy Kolodyazhnyy 06.01.2017 12:24
1

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

Altyapı provizyonumu ** idempotent yapmak için, bir paketin bir oneliner'da kontrol edilebilmesi gerektiğini buldum. @ Cuonglm'un cevabı üzerine inşa ettim. % Co_de% ve 1 değerini tersine çevirmek zorunda kaldım çünkü bir dize yazdırmak yerine bir çıkış durumu üretiyorum.

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

0 'yi paketinizin tek tırnaklı adıyla değiştirebilirsiniz, ancak provizyon senaryolarım için sonunda sahip olmanın okunabilirliğini beğeniyorum.

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

** Fark ettim ki, şef , kukla ve ansible tümünün python paketlerini yönetmek için eklentileri vardır, ancak siz eski bir sürümü kullandığınız ve kullanımdan kaldırılmış eklentileri kullanmak istemediğiniz bir durumda kendinizi bulabilirsiniz.

    
verilen cevap Bruno Bronosky 09.03.2017 20:25

Etiketlerdeki diğer soruları oku