<p><em>编辑以解决所有问题:</em></p>
<blockquote>
<p>When is an unique directory for virtual environments used? Which
option is recommended? Why?</p>
</blockquote>
<p>每个虚拟环境都“活”在自己的文件夹中。您安装的所有包都将放在那里,特别是如果每个环境都有不同的python版本。在</p>
<blockquote>
<p>How should I install per-project packages listed above?</p>
</blockquote>
<p>当您在创建项目环境后切换到它时,请参阅下面我的原始答案,所有安装的包都将以独占方式安装到您当前正在使用的虚拟环境中。在</p>
<p>您可以通过键入以下命令来检查当前使用的python</p>
^{1}$
<p>在终端中,您当前激活了项目环境。此外,您还可以检查</p>
^{pr2}$
<p>以确保使用<code>pip install somepackage</code>进行安装时,目标是正确的python。如果你想固定包裹,你可以这样做</p>
<pre><code>pip freeze > requirements.txt
</code></pre>
<p>任何时候,当前安装的包及其版本都将写入文本文件<code>requirements.txt</code>。现在,您可以始终使用</p>
<pre><code>pip install -r requirements.txt
</code></pre>
<blockquote>
<p>Should I use virtualenvwrapper?</p>
</blockquote>
<p>我总是在每个项目的虚拟环境中工作,这样其他可能使用特殊包的固定版本的项目不会受到影响。在</p>
<blockquote>
<p>How do I switch between projects (changing Python/virtual-environment
in the process) easily or painlessly?</p>
</blockquote>
<p>您可以在<code>~/.bashrc</code>或<code>~/.bash_aliases</code>中定义别名。在终端打开(在我的例子中),使用文本编辑器(例如vim/nano)打开<code>~/.bashrc</code>或您喜欢的一个:</p>
<pre><code>nano ~/.bashrc
</code></pre>
<p>在靠近末尾的某个地方,您可以添加一个带有别名的行,以切换到项目目录,同时激活环境:</p>
<pre><code>alias activate_proj1="cd ~/project_1 && pyenv activate venv_project_1"
</code></pre>
<p>所以您只需在终端中输入<code>activate_proj1</code>(制表符补全也可以),两个命令都会执行。不要忘了在用<code>source ~/.bashrc</code>更改某些内容后,或者只打开一个新的终端,重新获取bash文件。在</p>
<hr/>
<p><em>原始答案:</em></p>
<p><code>pyenv</code>将处理您需要的一切:</p>
<p>我的工作流程(对于一个项目,使其更具可读性)如下:</p>
<pre><code>pyenv install 3.5.1
cd python_projects
mkdir myproject
cd myproject
pyenv virtualenv 3.5.1 venv_myproject
</code></pre>
<p>之后,您只需使用<code>pyenv</code>激活由<code>pyenv</code>创建的virtualenv</p>
<pre><code>pyenv activate venv_myproject
</code></pre>
<p>这将打开你独特的环境。在这里你可以做所有你想做的事情,例如用pip安装你的软件包等等。
完成环境设置后,可以冻结环境并创建需求文件:</p>
<pre><code>pip freeze > requirements.txt
</code></pre>
<p>能够在需要时重建环境。这样,所有可能需要的开销(设置路径等)都将由pyenv处理。在</p>
<p>如果你想在不同的项目上工作,只要激活你需要的环境就可以了!在</p>