8

这些天我主要使用 Python 2.7 和 Django 1.3.3(托管在 Heroku 上)工作,并且我维护了多个项目。我一直在使用在 VirtualBox 中运行 Ubuntu 的桌面上工作,但最近不得不去旅行,想把所有东西都加载到我的笔记本上。但是,我很快发现 virtualenv + Github 非常容易创建项目,但我努力尝试将它们转移到我的笔记本上。我想出的方法是创建新的 virtualenv,然后从 github 克隆代码。但是,我无法在我真正想要的文件夹中执行此操作,因为它会说该文件夹不为空。所以,我会将它克隆到一个 tmp 文件夹,而不是他们将所有内容剪切/粘贴到我真正想要的位置。不可怕,但我只是觉得我 我在这里遗漏了一些东西,应该更容易。也许先克隆,然后是 mkvirtualenv?

这不是一个严重的问题,但我正在考虑进行更多更改(例如使用 VirtualBox 并使用双启动系统),如果我可以让它更顺畅一些,那就太好了。:)

最后,我找到并阅读了一些关于在计算机之间移动 git repos 的帖子,但我没有看到任何与 Virtualenv 的交易(也许我只是错过了它)。

编辑:为了清楚起见并避免混淆,我不会尝试“移动”virtualenv。我只是在谈论创建新方法的最佳方法。安装软件包,然后从 github 克隆 repo。

4

4 回答 4

14

您应该需要的唯一工作流程是:

git clone repo_url somedir
cd somedir
virtualenv <name of environment directory>
source <name of environment directory>/bin/activate
pip install -r requirements.txt

这假设您已运行pip freeze > requirements.txt(在激活 venv 时)列出所有 virtualenv-pip-installed 库并将其签入 repo。

于 2012-09-13T15:57:03.863 回答
9

那是因为您甚至不应该将 virtualenvs 移动到一个系统上的不同位置(有重定位支持,但它是实验性的),更不用说从一个系统到另一个系统了。创建一个新的虚拟环境:

  • 在另一个系统上安装 virtualenv
  • 获取 a requirements.txt,或者通过写一个或者通过存储pip freeze(和编辑输出)的输出
  • 将 requirements.txt 移动到另一个系统,创建一个新的 virtualenv,然后通过pip install -r requirements.txt.
  • 在另一个系统上克隆 git 存储库

对于更高级的需求,您可以创建一个包含 virtualenv + 自定义代码的引导脚本来设置其他任何内容。

编辑:将 virtualenv 的根目录和存储库的根目录放在同一个目录中对我来说似乎是一个非常糟糕的主意。将存储库放在 virtualenv 根目录内的目录中,或者将它们放入完全独立的树中。您不仅可以避免 git(理所当然地——通常情况下,git 未跟踪的所有内容都可以删除)抱怨现有文件,还可以将 virtualenv 用于多个存储库并避免名称冲突。

于 2012-09-13T15:54:24.307 回答
3

除了编写脚本创建一个新的 virtualenv 之外,您还应该创建一个包含所有依赖项(例如 Django1.3)的 requirements.txt 文件,然后您可以运行pip install -r requirements.txt它,这将为您安装所有依赖项。

您甚至可以让 pip 为您创建它,pip freeze > stable-req.txt这将打印出您当前 virtualenv 中的依赖项。然后,您可以将 requirements.txt 保留在版本控制之下。

于 2012-09-13T15:54:02.883 回答
1

virtualenv 的好处是您可以描述如何制作它,并且可以在多个平台上重复制作它。

因此,与其克隆整个事物,不如克隆一个方法来一致地创建 virtualenv,并将其保存在您的 git 存储库中。这样您就可以避免特定于平台的麻烦。

于 2012-09-13T15:51:12.530 回答