如何在项目内添加python项目的所有依赖?

Posted

技术标签:

【中文标题】如何在项目内添加python项目的所有依赖?【英文标题】:How to add all the dependencies of the python project within the project? 【发布时间】:2017-10-15 02:12:12 【问题描述】:

我使用 pip 安装项目依赖项。 Pip 将其所有依赖项安装到此位置

位置:/home/tara/taraproject/myvenv/lib/python2.7/site-packages

我想要完成的事情:

我想把所有的依赖都放在项目里面,而不是让用户在运营的时候去设置。只是想给运营团队减轻安装负担。

我尝试了什么?

我在我的 ProjectFolder 中尝试了这个,我的工作项目存在于此

/home/tara/taraprject/ProjectFolder

我创建了一个名为 dependencies 的目录并尝试在其中添加所有依赖项模块。然后导入为。

from dependencies.yapsy.PluginManager import PluginManager

我还通过添加 init.py 文件将目录设为模块。

Traceback (most recent call last):
  File "main.py", line 16, in <module>
    from dependencies.yapsy.PluginManager import PluginManager
  File "/home/tara/taraproject/myvenv/checkaccess/dependencies/yapsy/__init__.py", line 73, in <module>
    from yapsy.compat import is_py2, str
ImportError: No module named yapsy.compat

看起来导入工作正常,但模块的内部代码在导入时出现错误。

为何如此尝试?

如果我能做到,运维团队可以轻松获取我的项目并轻松运行,无需下载依赖项和进行必要的设置。只是想让运维部分更容易

我该如何解决此类问题或有什么方法?

【问题讨论】:

通过将其放入dependencies,您正在更改模块的绝对导入路径,因此很容易破坏它们。最好不要将dependencies 制作成python 包,而是将其添加到PYTHONPATH 环境变量中,同时保持您的导入语句与以前一样。 【参考方案1】:

根据所提供的描述,我相信虚拟环境可以为您的问题提供解决方案。来自虚拟环境的介绍(见下面的链接):

Python 应用程序通常会使用不支持的包和模块 作为标准库的一部分。应用程序有时需要 库的特定版本,因为应用程序可能需要 已修复特定错误或可以编写应用程序 使用库界面的过时版本。

这意味着一个 Python 安装可能无法满足每个应用程序的要求。如果应用程序 A 需要 特定模块的 1.0 版本,但应用程序 B 需要版本 2.0,则要求有冲突,安装 1.0 或 2.0 版本将导致一个应用程序无法运行。

这个问题的解决方法是创建一个虚拟环境,一个包含Python安装的自包含目录树 对于特定版本的 Python,加上一些额外的 包。

不同的应用程序可以使用不同的虚拟环境。为了解决前面的冲突需求示例,应用程序 A 可以拥有自己的虚拟环境,其中安装了 1.0 版,而应用程序 B 有另一个虚拟环境,安装了 2.0 版。如果应用 B 需要将库升级到 3.0 版本,这不会影响应用 A 的环境。

有关虚拟环境的更多信息,请访问(快速互联网搜索):

https://docs.python.org/3/tutorial/venv.html (Python 3) http://python-guide-pt-br.readthedocs.io/en/latest/dev/virtualenvs/ (Python 2) https://realpython.com/blog/python/python-virtual-environments-a-primer/

希望这会有所帮助。

编辑:在评论之后。使用 relocatable 选项可以重新定位虚拟环境。来自用户指南 (https://virtualenv.pypa.io/en/latest/userguide/#making-environments-relocatable):

通常环境与特定路径相关联。这意味着您无法移动环境或将其复制到另一台计算机。您可以修复环境以使其可重定位

另见:Python3 venv: Can env directory be renamed?

希望这可以解决您的问题。

【讨论】:

现在所有的包都安装在 virtualenv 生成的文件夹中,这不是问题。问题是我想把它放在我自己的项目目录中,因此最终用户不必再次设置它。

以上是关于如何在项目内添加python项目的所有依赖?的主要内容,如果未能解决你的问题,请参考以下文章

pipenv

如何使用 requirements.txt 在 python 项目中安装所有依赖项

Python项目requirements.txt依赖包如何生成?

maven 如何给web项目添加jar包依赖

如何检查多个Java项目的所有缺少的依赖项/相关JAR文件的列表?

如何在文件夹中构建所有解决方案的所有项目?