私は自分のスクリプト内でPyPiから直接パッケージをインストールする必要があります。たぶんモジュールやdistutils
(distribute
、pip
など)機能があるので、pypi.install('requests')
のようなものを実行することができ、リクエストは私のvirtualenvにインストールされます。
次のようなものも使えます。
import pip
def install(package):
if hasattr(pip, 'main'):
pip.main(['install', package])
else:
pip._internal.main(['install', package])
# Example
if __== '__main__':
install('argh')
Rickardのソリューションは、pip開発チームによってサポートされていないため、場合によってはクラッシュします(マルチスレッドなど)。さらに、pip 10以降、コードがpip._internal
に移動され、これがサポートされていないことが明確になりました。したがって、この解決策は「pip> = 10.0.0」のインポートエラーで失敗します。
Quantumの解決策はこの問題を解決するための好ましい方法ですが、彼の実装はそれが正しいpipを呼び出すことを保証するものではありません。
このソリューションは、コードを実行しているpythonインタプリタのpipを呼び出すことを保証します。
import subprocess
import sys
def install(package):
subprocess.call([sys.executable, "-m", "pip", "install", package])
Quantumのソリューションと同じですが、直接pipを実行する代わりに、コードを実行しているのと同じpython実行可能ファイルを実行し、インストールしたpipモジュールを実行するように指示し、残りの引数を渡します。
pip
を使用して必要なパッケージをインストールし、インストール後にそれをインポートする場合は、次のコードを使用できます。
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')
ユーザーとしてパッケージをインストールした場合は、パッケージをインポートできないという問題が発生する可能性があります。追加情報については、 sys.pathの更新方法? を参照してください。
これはうまくいくはずです。
import subprocess
def install(name):
subprocess.call(['pip', 'install', name])
"install_requires"オプションを使ってあなた自身のパッケージのsetup.pyの中に依存モジュールを定義します。
パッケージにコンソールスクリプトを生成する必要がある場合は、「bin」フォルダ(virtualenv環境など)に配置されるラッパースクリプトを生成するために「console_scripts」エントリポイントを使用できます。
この質問がまだ有効であることを願っています。私は上記のようなことをしました:
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)
2番目のtryブロックは最初のtryブロックのelse部分にも書くことができますが、私の問題ステートメントでは2つの別々のブロックを書かなければなりません。
これがi 私のプロジェクトのすべてのパッケージをインストールする方法です 。
メインコードを実行する前に リストにすべての名前を追加して oneを実行する.
"venv"を使ってこれを組み合わせるのは素晴らしいことです!
"""call this module to setup your python packages via pip"""
from pip._internal import main as pip
pip_install_argument = "install"
# packages to install
packages_to_install = [
"numpy", # math magic 1
"scipy", # math magic 2
]
def install(packages):
"""installes given packages via pip
Args:
package names as list
Returns:
None
"""
global pip_install_argument
for package in packages:
pip([pip_install_argument, package])
if __== '__main__':
install(packages_to_install)
私たちは私たちのマシンにピップがあって、欠けている特定の依存関係を捉えようとしていると思います。
import os
try:
import something
.....
.....
except ImportError as e:
pip = lambda : os.system('pip install' + str(e)[15:])
pip()
また、pip
関数を使用して「自己認識」インポーターメカニズムを適用する場合は、lambda
モジュール自体の使用を検討してください。このコードスニペットに従ってください:)
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()
私にとってはこれはうまくいきます(python 2.x)。すべての要件がrequirements.txt
の中で定義されていると仮定します。
def pip_auto_install():
"""
Automatically installs all requirements if pip is installed.
"""
try:
from pip._internal import main as pip_main
pip_main(['install', '-r', 'requirements.txt'])
except ImportError:
print("Failed to import pip. Please ensure that pip is installed.")
print("For further instructions see "
"https://pip.pypa.io/en/stable/installing/")
sys.exit(-1)
except Exception as err:
print("Failed to install pip requirements: " + err.message)
sys.exit(-1)
pip_auto_install()
モジュールをインポートするos端末をエミュレートするためにos.system
を使用します。その場合は、他のすべてのスクリプトでモジュールを使用できます。
たとえば、私は別々に追加されたスクリプトを一緒に追加して実行するゲームエンジンを作成しています。これらのスクリプトのほとんどはPygameを使用し、ユーザーがpygameを持っていない場合は
import os
os.system('pip install pygame')
残念ながら、私はどのようにユーザーのマシンにpipを取得するのかわからないので、これはpipを持っているユーザーに依存します。
1番目
> Download
> https://github.com/GeoNode/geonode-win-installer/blob/master/python_deps/pip-9.0.1-py2.py3-none-any.whl
2番目
extract .whl file and; use winRar
copy extracted file and paste sitepackage [or python module container]
files are.. pip and pip-19.0.3.dist-info
3番目
import pip
pip.main(['install','scpy'])
scpy or any package you want to install
Sysモジュールを使ってうまくインストールできます
import sys
!{sys.executable} -m pip install <package> --user
インポート可能なpip-moduleは常に動くわけではないので、もっと堅牢な方法があります。
def PackageInstall(error):
'''
Finds out which package is missing and downloads it automatically after five seconds.
Use example:
try:
import numpy as np
import matplotlib.pyplot as plot
except ImportError as error:
PackageInstall(error)
'''
import time, subprocess, os, sys
lib = str(error)[15:].replace('\'', '')
print('>>>',str(error))
print('>>> Download will start after five seconds')
time.sleep(5)
subprocess.call("pip install " + lib)
print('>>> Restarting')
os.startfile(__file__)
sys.exit()
これはWindowsで動作します。