virtualenvwrapper中环境与项目之间的关系是什么?

18 投票
2 回答
7105 浏览
提问于 2025-04-17 07:10

换句话说,mkvirtualenvmkproject 这两个命令有什么区别呢?

我有一个工作流程,像这样:

/dev
    projectA
        appA
        appB
    projectB
        appA
        appB

所有的应用程序共享一些资源(比如 South、pep8 等),但其他资源则是每个应用程序特有的。我应该使用 virtualenvwrapper 的“项目”功能来把这些依赖分开吗?

2 个回答

4

mkvirtualenv 是一个来自 virtualenvwrapper 的命令,它可以让管理 Python 虚拟环境变得更简单。而 mkproject 则是一个来自 virtualenvwrapper 插件的命令,用来管理你的项目(这个插件已经直接整合进了 virtualenvwrapper)。

这个插件页面提到了一些功能:

它可以管理你的开发项目工作目录和虚拟环境。定义了一个 API,用来创建模板,快速一致地创建新的环境。可以使用 virtualenvwrapper 的 workon 命令在项目之间切换。用户可以自定义钩子,以便定制新项目。

你并不需要使用 virtualenvwrapper 插件来创建或管理你的项目,才能使用虚拟环境的命令。这个插件只是为了方便,比如在使用 workon 命令时快速切换到项目目录,或者从模板创建新项目。

virtualenv 本身没有共享库的功能,除非你使用正确的标志来和系统的 site-packages 共享。我曾经遇到过一个项目,它提供了这个功能,还有其他一些功能,但我再也找不到它了。

编辑:现在 virtualenvwrapper 具备了 复制虚拟环境 的功能,并且可以将目录添加到你的虚拟环境 PATH,以便 共享库

25

根据我对文档的理解,mkvirtualenv projectenv这个命令只是创建了一个新的虚拟环境,名字叫projectenv,这个虚拟环境会放在$WORKON_HOME这个地方。而mkproject projectenv则不仅创建了一个名为projectenv的虚拟环境,还会创建一个同名的文件夹projectenv;创建完成后,这个projectenv的文件夹会自动成为你当前的工作目录。虚拟环境会在$WORKON_HOME里,而开发用的文件夹会在$PROJECT_HOME里。

需要注意的是,要让mkproject正常工作,你必须先把环境变量PROJECT_HOME设置成你想要创建项目的文件夹名字。你可以在设置$WORKON_HOME的地方一起设置,或者临时设置,比如:

export PROJECT_HOME=$HOME/src/allprojects 
mkproject mynewproject

这样一来,mynewproject就会成为你当前的虚拟环境,同时会在~/src/allprojects这个地方创建一个新的mynewproject文件夹。

撰写回答