首页 > 编程问答 >如何使用pipenv解决Python包依赖关系?

如何使用pipenv解决Python包依赖关系?

时间:2024-08-03 05:37:38浏览次数:12  
标签:python python-3.x pip dependencies pipenv

我正在使用 pipenv 处理 Python 包依赖项。

Python 包使用两个包(名为 pckg1 pckg2 ),它们依赖于名为 pckg3 的同一个包, 但来自两个不同的包版本 显示依赖关系树:

$ pipenv graph
  pckg1==3.0.0
    - pckg3 [required: >=4.1.0]
  pckg2==1.0.2
    - pckg3 [required: ==4.0.11]

尝试安装依赖关系:

$ pipenv install

Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
Hint: try $ pipenv lock --pre if it is a pre-release dependency.
Could not find a version that matches pckg3==4.0.11,==4.1.0,>=4.1.0 (from -r C:\Users\user\AppData\Local\Temp\pipenv-o7uxm080-requirements\pipenv-hwekv7dc-constraints.txt (line 2))
Tried: 3.3.1, 3.3.2, 3.3.3, 3.4.0, 3.4.2, 4.0.0, 4.0.0, 4.0.1, 4.0.1, 4.0.2, 4.0.2, 4.0.3, 4.0.3, 4.0.4, 4.0.4, 4.0.6, 4.0.6, 4.0.8, 4.0.8, 4.0.9, 4.0.9, 4.0.10, 4.0.10, 4.0.11, 4.0.11, 4.1.0, 4.1.0, 4.1.1, 4.1.1, 4.1.2, 4.1.2, 4.2.1, 4.2.1, 4.3.0, 4.3.0
There are incompatible versions in the resolved dependencies.

按照建议, pipenv install --skip-lock 可以解决问题,但依赖关系树仍未解决。

我很乐意告诉 Pipenv 覆盖|| |的要求,并指定 pckg2 pckg3>=4.1.0 如何解决这个问题?

How can this be resolved?


遇到的问题是 pckg1 pckg2 pckg3 有冲突的版本要求。 pckg1 要求 pckg3 版本大于等于 4.1.0,而 pckg2 要求的版本是 4.0.11。 这就导致了依赖冲突,pipenv 无法找到满足所有要求的版本。

以下是几种解决此问题的方法:

1. 更新 pckg2 的依赖:

  • 这是最理想的解决方案。 如果可能的话,请检查 pckg2 是否有更新版本,该版本依赖于 pckg3>=4.1.0 。 可以查看 pckg2 的文档或代码仓库来查找相关信息。

2. 使用 pipenv 的依赖覆盖功能:

  • 如果无法更新 pckg2 ,可以使用 pipenv --pre --dev 选项来强制安装 pckg3 的更高版本。例如:

    bash pipenv install "pckg3>=4.1.0" --pre

  • 这将尝试安装 pckg3 的预发布版本,该版本可能满足 pckg1 的要求。

  • 请注意,使用预发布版本可能会带来未知风险,因为它们可能不稳定。

3. 手动编辑 Pipfile

  • 可以直接编辑 Pipfile 文件,手动指定 pckg3 的版本。 将 pckg2 的依赖从 pckg3==4.0.11 修改为 pckg3>=4.1.0 。 然后运行 pipenv install 重新安装依赖。

    [packages] pckg1 = "*" pckg2 = "*" pckg3 = ">=4.1.0"

  • 这种方法需要手动管理依赖关系,并且可能会在将来导致问题,因此请谨慎使用。

4. 使用虚拟环境隔离项目:

  • 如果无法解决依赖冲突,可以为每个项目创建单独的虚拟环境,并在每个环境中安装不同的 pckg3 版本。 这将确保每个项目都使用其所需的依赖版本,而不会发生冲突。

总结:

解决依赖冲突的最佳方法是更新依赖项或使用 pipenv 的依赖覆盖功能。 手动编辑 Pipfile 或使用虚拟环境隔离项目是最后的手段,应该谨慎使用。

标签:python,python-3.x,pip,dependencies,pipenv
From: 51540404

相关文章

  • 存在的开放路径不起作用 - python
    代码获取测试logs\log.jsonl的根路径,该路径在图像中显然在那里,但无法打开它#doesntworkdir_path=os.path.dirname(os.path.realpath(__file__))withopen(os.path.join(dir_path,"logs\\log.jsnol"),'r')asjsondata:data=json.load(jsondata)wit......
  • 如何在系统PATH中永久添加路径? - Python
    我正在为我的一个项目创建一个安装程序,下载该项目的二进制文件(在ZIP文件中),然后将其解压缩到操作系统程序文件夹中的一个目录中,我想将此目录添加到|||。我的脚本是一个带有UI的安装程序,其目的是编译为PATH/可执行文件。如果你能找到我一种.exe平台无关......
  • python数据分析与可视化基础
    一、数据分析介绍:1.数据分析含义:数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理解并消化,以求最大化地开发数据的功能,发挥数据的作用。数据分析是为了提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。数据分析的数学基础在20世纪早......
  • 为什么要设置 os.environ[“PYTHONHASHSEED“] = “0“,这样做具体会影响哪些随机值?
    ......
  • Python,Geopandas报错,AttributeError: The geopandas.dataset has been deprecated and
    Python版本3.9,Geopandas版本1.0.1问题描述:这是执行的代码,importpandasaspdimportgeopandasimportmatplotlib.pyplotaspltworld=geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))world.plot()plt.show()这是报错信息,Traceback(mo......
  • Python,Maskrcnn训练,cannot import name ‘saving‘ from ‘keras.engine‘ ,等问题集合
    Python版本=3.9,tensorflow=2.11.0,keras==2.11.0问题一、module'keras.engine'hasnoattribute'Layer'Traceback(mostrecentcalllast):File"C:\Users\Administrator\Desktop\20240801\代码\test.py",line16,in<module>......
  • 7-Python数据类型——列表和元组的详解(增删改查、索引、切片、步长、循环)
    一、列表1.1列表list有序且可变的容器,可以存放多个不同类型的元素列表就是专门用来记录多个同种属性的值列表:存储同一个类别的数据,方便操作字符串,不可变:即:创建好之后内部就无法修改【内置功能都是新创建一份数据】name="xiaochaun"data=name.upper()print(nam......
  • python中的 is 和 ==
    一前言环境:win10python3.10二is和isnot1比较对象的identityis和isnot是python的比较运算符,比较运算符除了这两个,还有下图中的这些is和isnot比较的是两个对象的是identityidentity是啥,内置函数id()返回的就是这个东西通过上面id函数的解释,现在知道,identi......
  • Python应用开发——30天学习Streamlit Python包进行APP的构建(23):构建多页面应用程序
    创建动态导航菜单通过st.navigation,可以轻松创建动态导航菜单。您可以在每次重新运行时更改传递给st.navigation的页面集,从而更改与之匹配的导航菜单。这是创建自定义、基于角色的导航菜单的便捷功能。本教程使用st.navigation和st.Page,它们是在Streamlit1.36.0版中......
  • Python数据结构第二天—循环链表、树、二叉搜索树
    双向链表之前学习的单向链表只能从头遍历到尾,过程是单向的,而双向链表既可以从头遍历到尾,也可以从尾遍历到头,它的过程是双向的。既然它是双向的,那么我们要实现一个双向链表,就需要在单向链表的基础上,给每一个结点增加一个向前的引用。双向链表的创建:"""我们要实现的是一......