如何将Python项目的所有依赖项添加到项目中?

4
我使用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中,您正在更改模块的绝对导入路径,因此很容易破坏它们。最好不要将dependencies作为Python包,而是在保持导入语句不变的情况下将其添加到PYTHONPATH环境变量中。 - user2390182
1个回答

1
基于所提供的描述,我认为虚拟环境可以提供解决方案。从虚拟环境的介绍中可以看出,Python 应用程序通常会使用不属于标准库的包和模块。应用程序有时需要特定版本的库,因为应用程序可能需要修复特定的 bug 或者应用程序可能是使用了库的过时接口编写的。这意味着一个 Python 安装可能无法满足每个应用程序的要求。如果应用程序 A 需要特定模块的 1.0 版本,但应用程序 B 需要 2.0 版本,则需求存在冲突,安装 1.0 或 2.0 版本都将导致其中一个应用程序无法运行。解决此问题的方法是创建虚拟环境,这是一个自包含的目录树,其中包含特定版本的 Python 安装以及许多其他包。不同的应用程序可以使用不同的虚拟环境。为了解决之前的冲突需求示例,应用程序 A 可以有自己的虚拟环境,安装了 1.0 版本,而应用程序 B 具有另一个虚拟环境,安装了 2.0 版本。如果应用程序 B 需要将库升级到 3.0 版本,则不会影响应用程序 A 的环境。
更多有关虚拟环境的信息可以在以下网址(快速互联网搜索)中找到: 希望这能帮到您。
编辑:根据评论,虚拟环境可以使用可重定位选项变得可移植。用户指南中有详细说明(https://virtualenv.pypa.io/en/latest/userguide/#making-environments-relocatable)。

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

另请参阅: Python3 venv: Can env directory be renamed?

希望这能解决您的问题。


2
现在所有的包都安装在虚拟环境生成的文件夹中,这不是问题。问题是我想把它放在我的项目目录中,这样最终用户就不必再次设置它。 - Tara Prasad Gurung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接