Yanıtlar:
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
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.
vpythoniçin yüklemeniz gerekirsudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
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 .
İ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 .
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.
sys.modules, tamamen alakasız ve bence bunun yanıltıcı olduğunu düşünüyorum. Ama belki bu sadece benim.
sys.modulesburada herhangi bir yardım değil.
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
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)
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>
pip show <module-name>bir paketin kurulup kurulmadığını gösterecektir, örn pip show numpy.
İç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
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 :-)
grep -qyeniden null gereksiz gereksiz hale getirir.
/dev/nullYıllar boyunca birçok yararsız yönlendirmeler
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'])
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 ;
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
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
Bunu yazarken pip show ..., en kolay yol gibi görünüyor:
https://pip.pypa.io/tr/stable/reference/pip_show/
Ancak paket kurulmadığında sessizdir (yani hiçbir şey döndürmez).