如何在项目内添加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项目的所有依赖?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 requirements.txt 在 python 项目中安装所有依赖项
Python项目requirements.txt依赖包如何生成?