virtualenvwrapper中环境与项目之间的关系是什么?
换句话说,mkvirtualenv
和 mkproject
这两个命令有什么区别呢?
我有一个工作流程,像这样:
/dev
projectA
appA
appB
projectB
appA
appB
所有的应用程序共享一些资源(比如 South、pep8 等),但其他资源则是每个应用程序特有的。我应该使用 virtualenvwrapper 的“项目”功能来把这些依赖分开吗?
2 个回答
mkvirtualenv 是一个来自 virtualenvwrapper 的命令,它可以让管理 Python 虚拟环境变得更简单。而 mkproject 则是一个来自 virtualenvwrapper 插件的命令,用来管理你的项目(这个插件已经直接整合进了 virtualenvwrapper)。
这个插件页面提到了一些功能:
它可以管理你的开发项目工作目录和虚拟环境。定义了一个 API,用来创建模板,快速一致地创建新的环境。可以使用 virtualenvwrapper 的 workon 命令在项目之间切换。用户可以自定义钩子,以便定制新项目。
你并不需要使用 virtualenvwrapper 插件来创建或管理你的项目,才能使用虚拟环境的命令。这个插件只是为了方便,比如在使用 workon 命令时快速切换到项目目录,或者从模板创建新项目。
virtualenv 本身没有共享库的功能,除非你使用正确的标志来和系统的 site-packages 共享。我曾经遇到过一个项目,它提供了这个功能,还有其他一些功能,但我再也找不到它了。
编辑:现在 virtualenvwrapper 具备了 复制虚拟环境 的功能,并且可以将目录添加到你的虚拟环境 PATH,以便 共享库。
根据我对文档的理解,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
文件夹。