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-pip
içinde Zack Titan önerdiği gibi aşağıdaki açıklama , yüklemek için numpy
kullanabileceğiniz
pip install numpy
Uyarı: Python modüllerini yalnızca resmi Ubuntu deposu kullanarak kurmanız ve pip
yöntemi süper kullanıcı olarak kullanmamanız (örneğin, root
kullanmanız veya kullanmanız sudo
) önemle tavsiye edilir . Bazı durumlarda sistem pythonunu kırarak sisteminizi kullanılamaz hale getirebilir.
vpython
iç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 --user
Python 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 try
açı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 True
bu 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 try
bir import
ifadeye 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.modules
sözlüğe bir kez alarak bunları ekleyebiliriz .
sys.modules
sadece 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/except
a'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.modules
burada herhangi bir yardım değil.
Başka bir yol ise pkgutil
modül. Her iki Python 2 ve 3 ile çalışır:
python -c 'import pkgutil; print(1 if pkgutil.find_loader("module") else 0)'
module
Modü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 tuple
ihtiyacı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-pip
eğ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
, except
blok.
$ 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) -m
seç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 grep
eş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 -m
amaçlanan şey değil ; ancak hızlı bir test yapmak istiyorsanız en az yazmayı gerektiren yöntem :-)
grep -q
yeniden null gereksiz gereksiz hale getirir.
/dev/null
Yı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ı 1
ve 0
ben çı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 modules
ile 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).