Muszę zainstalować pakiet z PyPi bezpośrednio w moim skrypcie. Może jest jakiś moduł lub distutils
( distribute
, pip
etc.) funkcja, która pozwala mi tylko wykonać coś takiego pypi.install('requests')
i wnioski zostaną zainstalowane w moim virtualenv.
python
pip
python-module
pypi
chuwy
źródło
źródło
pip
nigdy nie jest dobrym pomysłem - sam fakt, że cała jego zawartość_internal
zaczyna się od wersji 10 ...pip._internal
nie jest przeznaczony do importowania, może robić absolutnie losowe rzeczy po zaimportowaniu do innego programu.Odpowiedzi:
Oficjalnie zalecanym sposobem instalowania pakietów ze skryptu jest wywołanie interfejsu wiersza polecenia pip za pośrednictwem podprocesu. Większość innych odpowiedzi tutaj przedstawionych nie jest obsługiwana przez pip . Co więcej, od pip v10, cały kod został przeniesiony
pip._internal
właśnie do tego w celu wyjaśnienia użytkownikom, że programowe korzystanie z pip jest niedozwolone.Użyj,
sys.executable
aby upewnić się, że zadzwonisz tak samo, jakpip
w przypadku bieżącego środowiska wykonawczego.źródło
Możesz także użyć czegoś takiego:
źródło
pip.main()
tak, jak w wierszu poleceń (ale z każdą opcją jako osobny wpis na liście zamiast pojedynczego ciągu). Aby określić, którą wersję pakietu chcesz zrobić, zrób to samo, co w wierszu poleceń .. np .:pip.main(['install', 'pip==7.1.0'])
from pip._internal import main as pipmain
możesz użyćpipmain()
tak jak przestarzałepip.main()
patrz stackoverflow.com/questions/43398961/...Jeśli chcesz użyć
pip
do zainstalowania wymaganego pakietu i zaimportowania go po instalacji, możesz użyć tego kodu:Jeśli zainstalowałeś pakiet jako użytkownik, możesz napotkać problem, którego nie możesz po prostu zaimportować. Zobacz Jak odświeżyć sys.path? po dodatkowe informacje.
źródło
imp.reload(site)
dostaje mnieRuntimeError: dictionary changed size during iteration
pip uninstall <package_name>
. Nadal mogę go odinstalować,pip.main
ale chciałem tylko wiedzieć, gdzie instaluje pakiet?pip install requests[security]
? Nie byłem pewien, czy poprawnie zdefiniuje globały poprawnie.pip.main
nie działa. pip.pypa.io/en/latest/user_guide/#using-pip-from-your-programTo powinno działać:
źródło
[sys.executable, '-m', 'pip', 'install', name]
upewnia się, że otrzymujesz „właściwą” pipę tutaj.dodałem obsługę wyjątków do odpowiedzi @ Aarona.
źródło
subprocess.call
więc kod może się nie powieść.Moduł zależny definiujesz w pliku setup.py własnego pakietu za pomocą opcji „install_requires”.
Jeśli twój pakiet wymaga wygenerowania skryptu konsoli, możesz użyć punktu wejścia „script_scripts”, aby wygenerować skrypt otoki, który zostanie umieszczony w folderze „bin” (np. W środowisku virtualenv).
źródło