python - 如果通过本地文件夹中的循环安装 python 包,则会出错
问题描述
我正在尝试使用循环通过 python 代码安装一些包,但一次只有一个包得到 install。
在下一个包中出现以下错误。
Could not install packages due to an EnvironmentError: [Errno 2] No such file or directory: 'c:\\users\\akshay~1.sha\\appdata\\local\\temp\\pip-req-tracker-aoybzz\\f37aad13bd20c8b1e66a004a7c01edf203f7e46ba784c9954fe935f7'
如果我再次运行脚本,它将安装第二个包并为第三个包抛出错误。如果我第三次运行它会安装第三次,我想一次性安装所有的包,请帮忙。下面是代码
==================================================== ==========================
import os
from pip._internal import main as pipmain
PACKAGES = {'pymongo': 'pymongo-3.4.0', 'pexpect': 'pexpect-4.6.0', 'pathlib': 'pathlib-1.0.1'}
def install_dependency(pkg_name, crnt_path):
pkg_path = os.path.join(crnt_path, "dependencies\\"+pkg_name+"\\")
print("Installing package from local...", pkg_name)
pipmain(["install", pkg_path])
def check_dependecies():
current_path = os.path.dirname(os.path.abspath(__file__))
print(PACKAGES.keys())
for package_name in PACKAGES.keys():
try:
__import__(package_name, globals=globals())
print("================> Package imported successfully", package_name)
except ImportError as import_error:
print("Package not present", import_error)
install_dependency(PACKAGES[package_name], current_path)
print("================> Package imported successfully", package_name)
__import__(package_name, globals=globals())
if __name__ == "__main__":
check_dependecies()
解决方案
我遇到了同样的问题,我已经使用解决方法解决了这个问题。
我们知道我们不能使用 pip 在 for 循环中安装多个包,但我们也知道我们可以一次安装多个包!
我就是这样进行的:
- 循环通过我们的包寻找它们的存在,如果没有,我们将它们保存在一个字典中
{pkg_name: pkg_id}
(例如{'pymongo': 'pymongo-3.4.0'}
:) - 创建
pkg2install
仅由pkg_id
(例如['pymongo-3.4.0', 'pexpect-4.6.0']
:)组成的列表 - 用于
pipmain
一次性安装它们:`pipmain(['install', *pkg2install])
您的代码已审核:
from pip._internal import main as pipmain
PACKAGES = {'pymongo': 'pymongo', 'pexpect': 'pexpect', 'pathlib': 'pathlib'}
def check_dependecies():
missing_pkgs = {}
for package_name in PACKAGES.keys():
try:
__import__(package_name, globals=globals())
print("================> Package imported successfully", package_name)
except ImportError as import_error:
print("Package not present", import_error)
missing_pkgs.update({package_name: PACKAGES[package_name]})
pkgs2install = missing_pkgs.values()
status = pipmain(["install", *pkgs2install])
if status == 0:
print("================> Missing packages installed successfully", pkgs2install)
for pkg in missing_pkgs.keys():
__import__(pkg, globals=globals())
print("================> Package imported successfully", pkg)
if __name__ == "__main__":
check_dependecies()
它生成的输出:
Package not present No module named 'pymongo'
Package not present No module named 'pexpect'
================> Package imported successfully pathlib
Collecting pymongo
Downloading https://files.pythonhosted.org/packages/a3/8c/ec46f4aa95515989711a7893e64c30f9d33c58eaccc01f8f37c4513739a2/pymongo-3.9.0-cp37-cp37m-macosx_10_6_intel.whl (378kB)
100% |████████████████████████████████| 378kB 4.4MB/s
Collecting pexpect
Using cached https://files.pythonhosted.org/packages/0e/3e/377007e3f36ec42f1b84ec322ee12141a9e10d808312e5738f52f80a232c/pexpect-4.7.0-py2.py3-none-any.whl
Collecting ptyprocess>=0.5 (from pexpect)
Using cached https://files.pythonhosted.org/packages/d1/29/605c2cc68a9992d18dada28206eeada56ea4bd07a239669da41674648b6f/ptyprocess-0.6.0-py2.py3-none-any.whl
Installing collected packages: pymongo, ptyprocess, pexpect
Successfully installed pexpect-4.7.0 ptyprocess-0.6.0 pymongo-3.9.0
================> Missing packages installed successfully dict_values(['pymongo', 'pexpect'])
================> Package imported successfully pymongo
================> Package imported successfully pexpect
注意:我没有使用版本或本地包,但机制应该保持不变
尽管晚了 11 个月,但我希望这对您有所帮助。
推荐阅读
- json - SSIS-如何将文件夹中的多个 JSON 文件导入 Oracle?
- c++ - 在 Qt 项目中使用时 g++ std::strtod 函数中的错误?
- batch-file - 使用延迟扩展替换字符串(区分大小写) - 批量
- python - osmx 高程数据:没有名为“keys”的模块
- php - 删除句子中的单词,但不删除双引号之间的单词
- java - Kafka Streams 窗口聚合批处理
- .net - WAT080 是否有解决方法:无法找到 Microsoft Azure SDK
- react-native - 我如何在电话上运行演示 React Native 代码
- css - 当英雄图像有文本时定位响应式英雄按钮
- sql - 如何使用 stuff() 列出每个应用程序的用户角色?