我在考虑把virtualenv的Django web应用程序,我正在我的应用程序的git存储库。这似乎是一个简单的方法来保持部署的简单和容易。有什么理由不让我这么做吗?


当前回答

我用的基本上是David Sickmiller的答案,但更自动化一点。我在我的项目的顶层创建了一个名为activate的(不可执行的)文件,包含以下内容:

[ -n "$BASH_SOURCE" ] \
    || { echo 1>&2 "source (.) this with Bash."; exit 2; }
(
    cd "$(dirname "$BASH_SOURCE")"
    [ -d .build/virtualenv ] || {
        virtualenv .build/virtualenv
        . .build/virtualenv/bin/activate
        pip install -r requirements.txt
    }
)
. "$(dirname "$BASH_SOURCE")/.build/virtualenv/bin/activate"

(根据David的回答,这假设您正在执行pip freeze > requirements.txt,以保持您的需求列表是最新的。)

以上给出了大致的思路;我通常使用的实际激活脚本(文档)更复杂一些,提供了-q (quiet)选项,在python3不可用时使用python,等等。

然后,它可以从任何当前工作目录中获取,并将正确激活,如果需要,首先设置虚拟环境。我的顶级测试脚本通常有这样的代码,所以它可以在不需要开发人员激活的情况下运行:

cd "$(dirname "$0")"
[[ $VIRTUAL_ENV = $(pwd -P) ]] || . ./activate

源。/activate,而不是activate,在这里很重要,因为后者会在找到当前目录中的activate之前找到您路径中的任何其他activate。

其他回答

如果你只是设置开发环境,然后使用pip冻结文件,caz,使git回购干净。

然后如果进行生产部署,则签入整个venv文件夹。这将使您的部署更具可重复性,不需要那些libxxx-dev包,并避免互联网问题。

所以有两个回购。一个用于您的主要源代码,其中包括一个requirements.txt。和一个env repo,其中包含整个venv文件夹。

我认为出现的主要问题之一是virtualenv可能无法被其他人使用。原因是它总是使用绝对路径。因此,如果您的virtualenv是在/home/lyle/myenv/,它将假设所有其他使用此存储库的人都是相同的(它必须是完全相同的绝对路径)。您不能假定人们使用与您相同的目录结构。

更好的做法是每个人都建立自己的环境(无论是否使用virtualenv)并在那里安装库。这也使您的代码在不同的平台(Linux/Windows/Mac)上更可用,还因为virtualenv安装在每个平台上都不同。

我认为最好的是将虚拟环境安装在存储库文件夹中的路径中,也许更好的是使用专用于环境的子目录(我在强制在存储库根文件夹中安装虚拟环境时意外删除了我的整个项目,很好,我将项目保存在Github的最新版本中)。

无论是自动安装程序还是文档都应该将virtualenv路径指示为相对路径,这样在与其他人共享项目时就不会遇到问题。关于包,使用的包保存在pip freeze -r requirements.txt中。

在回购中包含任何依赖于环境的组件或设置并不是一个好主意,因为使用回购的关键方面之一可能是与其他开发人员共享它。下面是我如何在Windows PC(比如Win10)上设置我的开发环境。

Open Pycharm and on the first page, choose to check out the project from your Source Control System (in my case, I am using github) In Pycharm, navigate to settings and choose "Project Interpreter" and choose the option to add a new virtual environment , you can call it "venv". Choose the base python interpreter which is located at C:\Users{user}\AppData\Local\Programs\Python\Python36 (make sure you choose the appropriate version of Python based on what you have installed) Note that Pycharm will create the new virtual environment and copy python binaries and required libraries under your venv folder inside your project folder. Let Pycharm complete its scanning as it needs to rebuild/refresh your project skeleton exclude venv folder from your git interactions (add venv\ to .gitignore file in your project folder)

好处:如果你想让人们很容易(好吧,几乎很容易)安装你的软件所需的所有库,你可以使用

pip freeze > requirements.txt

并将该指令放在git中,以便人们可以使用以下命令一次性下载所有所需的库。

pip install -r requirements.txt 

我用的基本上是David Sickmiller的答案,但更自动化一点。我在我的项目的顶层创建了一个名为activate的(不可执行的)文件,包含以下内容:

[ -n "$BASH_SOURCE" ] \
    || { echo 1>&2 "source (.) this with Bash."; exit 2; }
(
    cd "$(dirname "$BASH_SOURCE")"
    [ -d .build/virtualenv ] || {
        virtualenv .build/virtualenv
        . .build/virtualenv/bin/activate
        pip install -r requirements.txt
    }
)
. "$(dirname "$BASH_SOURCE")/.build/virtualenv/bin/activate"

(根据David的回答,这假设您正在执行pip freeze > requirements.txt,以保持您的需求列表是最新的。)

以上给出了大致的思路;我通常使用的实际激活脚本(文档)更复杂一些,提供了-q (quiet)选项,在python3不可用时使用python,等等。

然后,它可以从任何当前工作目录中获取,并将正确激活,如果需要,首先设置虚拟环境。我的顶级测试脚本通常有这样的代码,所以它可以在不需要开发人员激活的情况下运行:

cd "$(dirname "$0")"
[[ $VIRTUAL_ENV = $(pwd -P) ]] || . ./activate

源。/activate,而不是activate,在这里很重要,因为后者会在找到当前目录中的activate之前找到您路径中的任何其他activate。