Installing python module within code
我需要在脚本中直接安装pypi中的包。可能有一些模块或
您还可以使用如下内容:
1 2 3 4 5 6 7 8 9 10 11 | 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') |
PIP开发团队不支持Rickard的解决方案,在某些情况下(如多线程)会崩溃。此外,由于PIP 10,代码已移动到
Quantum的解决方案是解决问题的首选方法,但是他的实现并不能保证它调用正确的PIP。
这个解决方案保证它调用运行代码的python解释器的pip。
1 2 3 4 5 | import subprocess import sys def install(package): subprocess.call([sys.executable,"-m","pip","install", package]) |
它与Quantum的解决方案做的一样,但是它不直接运行pip,而是运行运行运行代码的同一个python可执行文件,并告诉它执行安装的pip模块,并将其余参数传递给它。
如果要使用
1 2 3 4 5 6 7 8 9 10 11 12 | 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了吗?更多信息。
这应该有效:
1 2 3 4 | import subprocess def install(name): subprocess.call(['pip', 'install', name]) |
您可以使用"Install_Requires"选项在自己包的setup.py中定义依赖模块。
如果您的包需要生成一些控制台脚本,那么您可以使用"控制台脚本"入口点来生成将要放置的包装脚本。在"bin"文件夹中(例如,您的virtualenv环境)。
我希望这个问题仍然有效。我是这样做的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 Please enter root password to install required package" os.system(cmd) reload(site) |
第二个try块也可以写在第一个try块的其他部分,但是在我的problem语句中,我必须写两个单独的块。
这就是我如何为我的项目安装所有包的方法。
只需将所有名称添加到列表中,并在运行主代码之前执行一个名称。
把这个和"venv"结合起来是很好的!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | """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 __name__ == '__main__': install(packages_to_install) |
我假设我们的机器上有一个PIP,并将尝试捕获缺少的特定依赖项。试试这个方法,让我知道你的想法。
1 2 3 4 5 6 7 8 | import os try: import something ..... ..... except ImportError as e: pip = lambda : os.system('pip install' + str(e)[15:]) pip() |
也,如果使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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),假设所有需求都在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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() |
第一
1 2 | > Download > https://github.com/GeoNode/geonode-win-installer/blob/master/python_deps/pip-9.0.1-py2.py3-none-any.whl |
第二
1 2 3 4 | 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 |
第三
1 2 3 4 | import pip pip.main(['install','scpy']) scpy or any package you want to install |
由于可导入的PIP模块并不总是工作的,因此有更可靠的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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上工作。
我使用
例如,我正在创建一个在单独的脚本上运行的游戏引擎,其中大多数脚本使用pygame,如果用户没有pygame,启动文件将使用以下代码添加:
1 2 | import os os.system('pip install pygame') |
不幸的是,我不知道如何将PIP放到用户的机器上,所以这取决于拥有PIP的用户。
您可以使用系统模块A进行安装。
1 2 | import sys !{sys.executable} -m pip install <package> --user |
你可以一直下载
1 | import os |
然后右键所有终端命令,从那里下载。
喜欢
1 2 3 4 5 | while True: code = input("") os.system("code") |
不管它是什么,我都不确定,但是如果你甚至不知道如何在终端中完成它,你将如何在Python中完成它。