virtualenv 和 CLI 工具

red*_*_hp 5 python virtualenv

我知道如何使用 virtualenv 来隔离长时间运行的脚本(例如 Flask 或 Twisted 应用程序)中的 Python 依赖项。但我一直对如何处理要从命令行调用的脚本感到困惑。

假设我想制作一个 CLI 工具来与某些 API 交互,可能使用 Click 或 docopt。显然,您不想source venv/bin/activate每次使用此工具时都必须这样做。但我认为最好仍然使用 virtualenv 来保持干净的环境,甚至超越开发。

很抱歉提出这个新手问题,但是...您应该做什么来打包脚本以便可以以这种方式干净地使用它?(我更习惯 RubyGems,并且仍在研究 Pip 和 VirtualEnv。)

Ore*_*ail -1

每个 virtualenv 都有自己的 Python site_packages、内置模型和 Python 解释器。因此 virtualenv 应该在项目级别使用,而不是在“逐个包”级别使用。它隔离了 Python 模块和可能的依赖项的集合。每个 virtualenv 都有自己的位置,pip 将在其中安装软件包。从理论上讲,virtualenv 应该不是必需的,但在实践中,有一种方法可以让不同版本的 Python 模块和 Python 解释器拥有不同的“环境”,这是很好的。我不知道 Ruby 是否有类似的东西,可以让您为不同的项目拥有不同的 gem“集”。

使用直接 virtualenv 的人会向他们的 中添加别名.bashrc,例如:

alias workonawesomeproject="source ~/venv/awesomeproject/bin/activate"
Run Code Online (Sandbox Code Playgroud)

他们将使用别名激活 virtualenv

workonawesomeproject
Run Code Online (Sandbox Code Playgroud)

要离开 virtualenv,您可以使用以下命令deactivate

处理 virtualenvs 的一种更简单的方法是使用virtualenvwrapper

pip install virtualenvwrapper

将这些行添加到您的.bashrc(或其他 shell 初始化文件)

export WORKON_HOME=$HOME/venv # this directory is your choice
export PROJECT_HOME=$HOME/src # this directory is your choice
source /usr/local/bin/virtualenvwrapper.sh # leave this alone
Run Code Online (Sandbox Code Playgroud)

如果您刚刚修改过,.bashrc请确保获取它的来源

source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

然后要创建一个新的 virtualenv,您只需运行

mkvirtualenv awesomeproject
Run Code Online (Sandbox Code Playgroud)

使用该 virtualenv

workon awesomeproject
Run Code Online (Sandbox Code Playgroud)

停用该 virtualenv

deactivate
Run Code Online (Sandbox Code Playgroud)

Virtualenvwrapper 文档: http://virtualenvwrapper.readthedocs.org/en/latest/install.html