Instalacja modułu Pythona w kodzie
Muszę zainstalować pakiet z PyPi prosto w moim skrypcie.
Może jest jakiś moduł lub distutils
(distribute
, pip
itd.) funkcja, która pozwala mi po prostu wykonać coś w rodzaju pypi.install('requests')
i żądania zostaną zainstalowane w moim virtualenv.
10 answers
Możesz również użyć czegoś w rodzaju:
import pip
def install(package):
if hasattr(pip, 'main'):
pip.main(['install', package])
else:
pip._internal.main(['install', package])
# Example
if __name__ == '__main__':
install('argh')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-17 11:37:29
Jeśli chcesz użyć pip
do zainstalowania wymaganego pakietu i zaimportowania go po instalacji, możesz użyć tego kodu:
def install_and_import(package):
import importlib
try:
importlib.import_module(package)
except ImportError:
import pip
pip.main(['install', package])
finally:
globals()[package] = importlib.import_module(package)
install_and_import('transliterate')
Jeśli zainstalowałeś pakiet jako użytkownik, możesz napotkać problem, że nie możesz go po prostu zaimportować. Zobacz Jak odświeżyć sys./ align = "left" / aby uzyskać dodatkowe informacje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:30
Rozwiązanie Rickarda nie jest obsługiwane przez zespół programistów pip i w niektórych przypadkach ulegnie awarii (np. wielowątkowy). Ponadto od pip 10 kod został przeniesiony do pip._internal
w celu wyjaśnienia, że nie jest to obsługiwane, rozwiązanie to zawiedzie z błędem importu na "pip>=10.0.0".
To rozwiązanie gwarantuje, że wywołuje pip interpretera Pythona obsługującego kod.
import subprocess
import sys
def install(package):
subprocess.call([sys.executable, "-m", "pip", "install", package])
Robi to samo co rozwiązanie Quantum, jednak zamiast uruchamiać pip bezpośrednio, uruchamia ten sam program wykonywalny Pythona, uruchamiając kod i nakazując mu wykonanie zainstalowanego modułu pip i przekazując mu resztę argumentów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-09 13:47:15
To powinno zadziałać:
import subprocess
def install(name):
subprocess.call(['pip', 'install', name])
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-08 17:52:29
Definiujesz moduł zależny wewnątrz setup.py własnego pakietu z opcją "install_requires".
Jeśli twój pakiet musi mieć wygenerowany skrypt konsoli, możesz użyć punktu wejścia" console_scripts", aby wygenerować skrypt wrappera, który zostanie umieszczony w folderze 'bin' (np. Twojego środowiska virtualenv).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-08 17:38:59
Mam nadzieję, że to pytanie jest nadal aktualne. Zrobiłem powyższe coś takiego:
import sys
import os
import site
try:
import pip
except ImportError:
print "installing pip"
cmd = "sudo easy_install pip"
os.system(cmd)
reload(site)
try:
import requests
except ImportError:
print "no lib requests"
import pip
cmd = "sudo pip install requests"
print "Requests package is missing\nPlease enter root password to install required package"
os.system(cmd)
reload(site)
Drugi blok try może być również zapisany w części else pierwszego bloku try, jednak w moim problem statement muszę napisać dwa oddzielne bloki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-12 11:38:38
Zakładam, że mamy pip na naszej maszynie i spróbujemy złapać konkretną zależność, której brakuje.. spróbuj tej metody i daj mi znać, co myślisz.
import os
try:
import something
.....
.....
except ImportError as e:
pip = lambda : os.system('pip install' + str(e)[15:])
pip()
Także,
proszę rozważyć pracę z samym Modułem pip
, jeśli używa się funkcji lambda
do zastosowania "samoświadomego" mechanizmu importera. Po prostu podążając za tym fragmentem kodu:)
try:
import somthing
..........
..........
except ImportError as e:
# importing pip module to handle pip functionalites
import pip
# create a lambda that import using pip by module_error_name=e[15:]
installer = lambda : pip.main(['install', str(e)[15:])
# create a lambda that import a module by linear_lambda_call
importer = lambda x : __import__(str(x)).import_module()
# install the module
installer()
# import the module
importer()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-08 19:17:55
Możesz zainstalować za pomocą modułu sys a well
import sys
!{sys.executable} -m pip install <package> --user
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-07 17:01:10
Używam os.system
do emulowania terminala os importującego moduł, ponieważ wtedy można go używać we wszystkich innych skryptach.
Na przykład, tworzę silnik gry, który działa na oddzielnych skryptach dodanych razem, większość z tych skryptów używa Pygame i jeśli użytkownik nie ma pygame, plik startowy doda go za pomocą tego kodu:
import os
os.system('pip install pygame')
Niestety, nie mam pojęcia, jak dostać Pipa na maszynę użytkownika, więc zależy to od tego, czy użytkownik ma Pipa.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-14 10:52:03
Zawsze możesz pobrać
import os
Następnie wszystkie polecenia terminala, aby pobrać go stamtąd.
Jak
while True:
code = input("")
os.system("code")
Cokolwiek to jest, nie jestem pewien, ale jeśli nawet nie wiesz, jak to zrobić w terminalu, jak to zrobisz w Pythonie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-01 21:32:09