【问题标题】:How to bundle python pip dependencies with project so don't need to run pip install如何将 python pip 依赖项与项目捆绑在一起,因此不需要运行 pip install
【发布时间】:2017-04-19 05:27:40
【问题描述】:

对于一个项目,我不能让用户在运行应用之前使用 pip install。

我的项目是一个 python 烧瓶应用程序,我使用 pip 来获取依赖项。如何捆绑它以便应用程序可以在不使用 pip install 的情况下运行?

【问题讨论】:

  • 为什么不呢?用户是谁?一般来说,它可能是: 1. 完全不需要了解 Flask 的网络应用程序的最终用户;或 2. 非常适合安装依赖项的开发人员。
  • 我在做这个作为一个学校项目(所有的代码都已经填写好了)但是因为我的教授要求我不能让人们使用 pip install 并且无法谷歌搜索相关答案
  • 什么“人”?目前尚不清楚您要提供什么。你为什么不和教授谈谈呢?即使他们不会告诉你一切,你至少有一个更清楚的问题要问。
  • 我认为这些人是标记项目的 TA,这就是他的回答
  • 那么我鼓励你问问为什么那些给你做作业的人不能做基本的开发任务。

标签: python pip


【解决方案1】:

我以前做过。我为我的项目创建了一个 virtualenv,因此所有依赖项(包括 python 可执行文件)都包含在项目子目录树中。然后只需压缩该目录树。要在其他地方安装,只需解压缩并运行它。

【讨论】:

  • 虚拟环境并非为便携而设计的
  • 是的,不是 100% 便携的。但是在这种情况下是否需要 100% 的可移植性?就我而言,我们都使用了相同的 opsys,我猜 OP 也可能是这种情况。但是你又是对的:如果需要跨不同 opsys 的可移植性,这不是你的解决方案。
  • 具体步骤是什么?
  • virtualenv 是每个 Python 程序员都应该知道的超核心话题。即使你不在这里使用它也要学习它。有很多关于它的教程。这是我在 Google 中找到的:docs.python-guide.org/en/latest/dev/virtualenvs
  • 另外,重新找到了我不久前阅读并喜欢的本教程。特别是关于 pip 和 virtualenv 是您需要并且应该全局安装的唯一软件包的建议。其余的,安装在 virtualenv 中。见dabapps.com/blog/introduction-to-pip-and-virtualenv-python
【解决方案2】:

我很确定 python 会检查它的安装目录中的文件依赖项,并且与您正在运行的 python 文件位于同一目录中。您可以从 pip 安装目录复制软件包并将它们放在与您的 python 文件相同的目录中。它应该会看到它们。

制作一个 bash 脚本非常容易。 打开一个文本编辑器,使用 .sh 扩展名保存它。 输入你的命令。

这是一个 linux bash 脚本:

#!/bin/bash
#This is a comment
sudo pip install -U memory_profiler
sudo pip install pympler

这是一个 Windows 批处理脚本。 另存为 .bat 文件

ECHO
cd [pip install directory]
pip command
pip command

【讨论】:

  • 是否有不需要 bash 脚本或 pip install 的替代方案?因为没有冒犯,但这似乎与 pip install 相同,但您正在运行 bash 脚本
  • 是的,但用户不必自己安装它们。您也可以让脚本在最后运行您的启动文件。或者我只是将你的依赖项复制到与你的起始 python 文件相同的目录中。
  • 运行该 bash 脚本比 pip install -r requirements.txtpython setup.py install 更难吗?
【解决方案3】:

当 python 运行一个文件时,它会将当前工作目录添加到它将查找要导入的模块的位置。

您只需将需求直接安装到您的项目文件夹中。

最简单的方法是:

  • 在某处创建virtualenv 并执行您的pip install -r requirements.txt
  • site-packages 文件夹的内容从环境($VIRTUAL_ENV/lib/python2.7/site-packages 注意:您可能需要针对python 版本进行相应更改)复制到您的项目文件夹中。
  • 分发您的项目文件夹。

编辑:补充一点,我记得你正在做类似于packaging an AWS Lambda 的事情。

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 2015-02-28
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    相关资源
    最近更新 更多