将虚拟环境项目从本地迁移到服务器(flask项目),是否必须再次安装依赖项?

时间:2014-08-10 05:34:00

标签: python git flask pip virtualenv

我在本地计算机上的虚拟环境中创建了一个烧瓶应用程序,我可以在本地运行它(http://localhost:5000)

然后我把这个项目放在一个仓库中,然后我去了我的服务器并git克隆了这个项目。

我的本​​地计算机和服务器上的所有文件都是相同的。

然后我想通过尝试.venv/bin/active

在服务器上测试这个虚拟环境

然而我遇到了一个错误,它说我没有烧瓶!:

Traceback (most recent call last):
  File "__init__.py", line 1, in <module>
    from flask import Flask
ImportError: No module named flask

我假设我必须首先在虚拟环境中初始化某些东西? - 比如安装所有依赖项或者我必须再次pip install flask吗? - (这样做会很有趣......)

感谢。

2 个答案:

答案 0 :(得分:4)

一般来说, python环境不能跨机器移植

这意味着您无法可靠地期望跨机器移植虚拟环境。如果您在不同的操作系统之间移动东西,则尤其如此。例如,在Windows中创建的虚拟环境在Linux中不起作用。

同样,在OSX中创建的虚拟环境在Linux中不起作用。有时候,你可以获得Linux&gt; Linux兼容性,但这是偶然的,不能依赖。

原因很多 - 有些库需要针对原生扩展构建,有些库需要兼容的系统库才能工作等。

因此,最可靠的工作流程如下:

  1. 可以(但我建议不要这样做)将您的虚拟环境放在与项目相同的目录中。如果这样做,请确保不将虚拟环境根目录添加到源控制系统。最好将虚拟环境与源代码分开(请参阅virtualenvwrapper project项目,了解分别管理虚拟环境的好方法)。

  2. 通过运行pip freeze > requirements.txt来创建需求文件。保持此文件更新并将其添加到源控制系统。在目标系统中,只需创建一个虚拟环境,然后创建pip install -r requirements.txt以确保正确安装所有要求。这样做将确保还构建和安装任何本机扩展。

答案 1 :(得分:0)

一些可能的问题:

  • 当您创建原始虚拟环境时,是否指定了--no-site-packages,否则您的包可能正在使用系统中的元素。
  • 某些软件包依赖于目标系统上可能缺少的系统安装库
  • 您的服务器是否使用相同的操作系统在开发系统的类似硬件上运行 - 如果不是,您的virtualenv可能无法重新安装软件包,因为任何C / C ++扩展都将针对错误的硬件构建/ OS并且不起作用。

问题是virtualenv是一个包构建器,(看看pyinstaller),而是当你将代码分发到一个新平台然后提供的开发和测试环境,提供你开始使用--no-site-packages,你可以很容易地找到你需要哪些软件包来找出你需要在新目标上安装的软件包。

所以基本上 - 你,或更有可能是系统管理员,确实需要run pip install flask以及其他一些事情!