我在本地计算机上的虚拟环境中创建了一个烧瓶应用程序,我可以在本地运行它(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
吗? - (这样做会很有趣......)
感谢。
答案 0 :(得分:4)
一般来说, python环境不能跨机器移植。
这意味着您无法可靠地期望跨机器移植虚拟环境。如果您在不同的操作系统之间移动东西,则尤其如此。例如,在Windows中创建的虚拟环境在Linux中不起作用。
同样,在OSX中创建的虚拟环境在Linux中不起作用。有时候,你可以获得Linux&gt; Linux兼容性,但这是偶然的,不能依赖。
原因很多 - 有些库需要针对原生扩展构建,有些库需要兼容的系统库才能工作等。
因此,最可靠的工作流程如下:
您可以(但我建议不要这样做)将您的虚拟环境放在与项目相同的目录中。如果这样做,请确保不将虚拟环境根目录添加到源控制系统。最好将虚拟环境与源代码分开(请参阅virtualenvwrapper
project项目,了解分别管理虚拟环境的好方法)。
您应通过运行pip freeze > requirements.txt
来创建需求文件。保持此文件更新并将其添加到源控制系统。在目标系统中,只需创建一个空虚拟环境,然后创建pip install -r requirements.txt
以确保正确安装所有要求。这样做将确保还构建和安装任何本机扩展。
答案 1 :(得分:0)
一些可能的问题:
问题是virtualenv是不一个包构建器,(看看pyinstaller),而是当你将代码分发到一个新平台然后提供的开发和测试环境,提供你开始使用--no-site-packages,你可以很容易地找到你需要哪些软件包来找出你需要在新目标上安装的软件包。
所以基本上 - 是你,或更有可能是系统管理员,确实需要run pip install flask
以及其他一些事情!