Jawaban:
Cara mengetahui apakah modul python diinstal atau tidak dalam sistem: Anda dapat melakukan tes yang sangat mudah di terminal,
$ 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
Anda dapat menginstal modul tertentu dengan mengunduh paket masing-masing dari repositori, misalnya Anda dapat menginstalscipy
sebagai,
sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3
Bergantian Anda juga dapat menginstal modul python menggunakan python-pip
seperti yang disarankan oleh Zack Titan di komentar di bawah ini , Untuk menginstal numpy
Anda dapat menggunakan
pip install numpy
Peringatan: Sangat disarankan untuk menginstal modul python hanya menggunakan repositori resmi Ubuntu dan tidak menggunakan pip
metode sebagai superuser (yaitu, sebagai root
atau menggunakan sudo
). Dalam beberapa kasus, ini dapat membuat sistem Anda tidak dapat digunakan dengan memecah sistem python.
Cara menginstal paket menggunakan pip
ke lingkungan virtual lokal.
vpython
Anda harus menginstalnya sebagaisudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
sudo pip
; itu dapat merusak sistem python. Gunakan apt-get untuk menginstal paket untuk sistem python. Anda bisa menggunakan pip --user
opsi atau virtualenv untuk menginstal paket Python untuk Anda sendiri.
Jika kita tidak ingin mengimpor modul yang tidak diinginkan (yang akan terjadi dalam try
pernyataan), kita dapat menggunakan sys.modules
untuk menguji modul yang diinstal dan diimpor sebelumnya.
Dalam masalah shell python:
>>> import sys
Kemudian uji untuk modul yang diinstal:
>>> 'numpy' in sys.modules
True
>>> 'scipy' in sys.modules
False
Perhatikan bahwa hanya modul-modul yang diimpor sebelum memberikan True
pengujian ini, semua modul lain (bahkan jika diinstal) menghasilkanFalse.
Alternatif lain untuk try
sebuah import
pernyataan di konsol python memanggil inbuilt help()
fungsi. Ini tidak akan memberikan dokumentasi untuk modul yang tidak diinstal, misalnya
>>> help('scipy')
no Python documentation found for 'scipy'
Output dokumen bantuan yang sangat panjang dari modul yang diinstal dapat terganggu Q.
Sekarang untuk menginstal modul yang hilang, disarankan untuk menggunakan manajemen paket Ubuntu (dan bukan cara pip Python) karena kita memerlukan akses root dan juga untuk mencegah mengacaukan sistem Python-dependend kita. Untuk modul yang dimaksud misalnya adalah:
sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3
Setelah instalasi kita kemudian dapat menambahkannya ke sys.modules
kamus dengan mengimpornya sekali.
sys.modules
hanya berisi modul yang sudah diimpor , jadi ini bukan cara yang dapat diandalkan untuk menguji apakah suatu modul telah diinstal. Tes yang paling dapat diandalkan adalah dengan menggunakan a try/except
dan menjebaknya ImportError
, seperti yang telah disarankan beberapa orang lainnya.
sys.modules
sama sekali tidak relevan dan saya pikir penyebutan itu menyesatkan. Tapi mungkin itu hanya aku.
sys.modules
tidak ada bantuan di sini.
Cara lain adalah pkgutil
modul. Bekerja dengan Python 2 & 3:
python -c 'import pkgutil; print(1 if pkgutil.find_loader("module") else 0)'
Anda perlu mengganti module
dengan nama modul Anda, contoh:
$ python -c 'import pkgutil; print(1 if pkgutil.find_loader("math") else 0)'
1
print()
juga akan berfungsi dengan baik di Python 2; Itu diperlakukan sebagai sintaks grup-dengan-parens, dan tidak memiliki efek samping. Hanya ketika Anda ingin menambahkan beberapa item (seperti di print('a', 'b')
dalamnya akan diperlakukan sebagai tuple
, di mana Anda memang membutuhkannya from __future__ import print_function
, tetapi itu tidak berlaku dalam kasus ini, Anda hanya dapat menulis kode yang kompatibel dengan maju dengan menambahkan parens (saya menguji perubahan saya dalam Python 2 dan 3)
Saya tahu OP awalnya meminta solusi setelah memulai Python, tetapi di luar python saya gunakan pip
. Di ubuntu:, sudo apt-get install python-pip
jika belum diinstal.
Kemudian untuk melihat modul pihak ketiga apa yang tersedia, jalankan saja:
pip freeze
Atau bahkan
pip list
Dan keduanya akan menunjukkan kepada Anda semua modul yang terpasang dan versinya.
Jika modul yang Anda cari tidak diinstal, sebagian besar waktu Anda dapat dengan mudah menginstalnya dengan pip:
pip install <module-name>
Jika Anda tidak yakin apakah modul itu ada atau apa namanya PyPI, gunakan pip search
:
pip search <keyword>
pip show <module-name>
akan menunjukkan apakah suatu paket diinstal, mis pip show numpy
.
Anda bisa memasukkan kode ke dalam try
, except
blokir.
$ 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
Untuk memberikan jawaban lain, demi penyelesaian:
Anda dapat (ab) menggunakan -m
opsi. Dari halaman Python:
-m module-name
Searches sys.path for the named module and runs the correspond‐
ing .py file as a script.
Yang akan memberi kita:
$ 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
Tetapi untuk modul yang tidak ada, itu akan memberi kita:
$ python2 -m doesnt_exist
/sbin/python2: No module named doesnt_exist
Kita bisa menggunakan grep
untuk mencocokkan ini:
$ 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
Ini sedikit hack-ish, dan bukan untuk apa -m
; tetapi ini adalah metode yang paling tidak membutuhkan pengetikan jika Anda ingin tes cepat :-)
grep -q
membuat pengalihan ke nol tidak perlu.
/dev/null
Saya menulis contoh dengan Python:
import pip
import sys
from bigml.api import BigML
if not 'bigml' in sys.modules.keys():
pip.main(['install', 'bigml'])
Saya menemukan bahwa untuk membuat penyediaan infrastruktur saya ** idempoten, saya harus dapat memeriksa paket dari shell di oneliner. Saya membangun jawaban @ cuonglm. Saya harus membalikkan 1
dan 0
karena saya menghasilkan status keluar daripada mencetak string.
python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader(sys.argv[1]) else 1)" pymongo
Anda dapat menggantinya sys.argv[1]
dengan nama yang dikutip tunggal dari paket Anda, tetapi untuk skrip penyediaan saya, saya suka keterbacaan memilikinya pada akhirnya.
python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('pymongo') else 1)"
** Saya menyadari bahwa koki , boneka , dan yang mungkin semua memiliki plugin untuk mengelola paket python, tetapi Anda mungkin menemukan diri Anda dalam situasi seperti saya di mana Anda menggunakan versi yang sudah ketinggalan zaman dan tidak ingin menggunakan plugin yang sudah usang.
Satu juga dapat menggunakan pydoc modules
, yang dapat disaring dengan grep
untuk menemukan modul tertentu. Outputnya ditampilkan dalam format kolom. Satu-satunya kelemahan dari pendekatan ini adalah bahwa ia juga akan memasukkan file python dalam direktori kerja saat ini. Meskipun demikian, saya sering menggunakannya sendiri dan ini adalah salah satu pendekatan yang sangat dikutip pada pertanyaan terkait ini: https://stackoverflow.com/q/739993/3701431
Dari Shell Ubuntu, secara default bash, sesederhana
pip list | grep <package-name-Case-Matters>
Contohnya
pip list | grep pywinrm
pip list | grep numpy
Dan, jika Anda memiliki keraguan tentang kasus ini (meskipun saya pikir semua nama paket selalu huruf kecil):
pip list | grep [Nn]um[Pp]y # it works with numpy, Numpy, numPy, and NumPy
Saat menulis ini, pip show ...
tampaknya menjadi cara termudah:
https://pip.pypa.io/en/stable/reference/pip_show/
Tetapi diam (mis. Mengembalikan apa-apa) ketika paket tidak diinstal.