【问题标题】:Getting error if installing the python packages through loop from local folder如果通过本地文件夹中的循环安装 python 包,则会出错
【发布时间】:2019-05-29 01:00:32
【问题描述】:

我正在尝试使用循环通过 python 代码安装一些包,但一次只能安装一个包

在下一个包中出现以下错误。

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()

【问题讨论】:

  • 代码是否每次尝试都成功完成,即使必须重新运行多次?
  • 是的,成功完成,但只安装尚未安装的包,并为下一个包提供错误。我也通过系统中的文件夹安装这些包
  • 安装成功后,包名是主包还是依赖包?
  • 主包...
  • 在第一个 for 循环内但在 try 之外是否有另一个 for 循环除了工作? for i in range(3) 3 次没有安装会跳到下一个。

标签: python python-2.7 pip python-import lib


【解决方案1】:

我遇到了同样的问题,我已经使用解决方法解决了这个问题。

我们知道我们不能使用 pip 在 for 循环中安装多个包,但我们也知道我们可以一次安装多个包!

我就是这样继续的:

  1. 循环通过我们的包寻找它们的存在,如果没有,我们将它们保存在一个字典中{pkg_name: pkg_id}(例如:{'pymongo': 'pymongo-3.4.0'}
  2. 创建仅由pkg_id 组成的列表pkg2install(例如:['pymongo-3.4.0', 'pexpect-4.6.0']
  3. 使用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 个月,但我希望这对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多