如何配置 virtualenvwrapper 以使用 pyenv

Car*_*lyn 5 virtualenvwrapper python-2.7

我正在尝试设置我的 imac(小牛)以便能够轻松切换到不同版本的 python。我成功地使用 rbenv 为 Ruby 项目完成了这项工作,并发现 pyenv 正是我在这方面所寻找的。我遇到的问题是使用 pyenv 创建虚拟环境。

我尝试安装 pyenv-virtualenv,因为我认为这会与 pyenv 配合使用,但目前它似乎已损坏,我很难得到详细的响应。首先,'activate' 命令不起作用(它说该命令不存在,尽管有文档),一旦我安装了 pyenv-virtualenv 插件,pyenv 就不再使用正确的 python 版本。最终我删除了插件,pyenv 又开始工作了。

现在我想在 pyenv 中使用常规的 virtalenvwrapper,但不断遇到我没有足够经验来解决的错误。

首先,我根据文档安装了 pyenv 和 virtualenv 以及 virtualenvwrapper 。然后我用 pyenv 安装了 python 2.7.6。这似乎工作正常,但是当我尝试在 .bash_profile 中配置 virtualenvwrapper 设置时 - 我遇到了以下错误:

-bash: /usr/local/bin/python: No such file or directory
virtualenvwrapper.sh: There was a problem running the initialization hooks. 

If Python could not import the module virtualenvwrapper.hook_loader,  
check that virtualenv has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python and that PATH is
set properly.
Run Code Online (Sandbox Code Playgroud)

如果我检查 python 路径,我会得到这个:

bin [master] >> which python
/usr/bin/python
bin [master] >> pyenv which python
/Users/insomniac/.pyenv/versions/2.7.6/bin/python
Run Code Online (Sandbox Code Playgroud)

我尝试VIRTUALENVWRAPPER_PYTHON对两者进行设置/usr/local/bin/python/usr/bin/python 但这些设置似乎都不起作用 - 我继续遇到相同的错误。

我真的不想使用,/Users/insomniac/.pyenv/versions/2.7.6/bin/python 因为这似乎是错误的,因为指定了 python 版本并且不利于切换 python 版本。

这些是我的 .bash_profile 中的相关设置:

# Set  PYTHONPATH
export PYTHONPATH=/Users/insomniac/Repo/tools/python/:$PYTHONPATH

# User paths first
export PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:sbin:$PATH

# virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Repo
export PIP_VIRTUALENV_BASE=$WORKON_HOME
export PIP_RESPECT_VIRTUALENV=true
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv

# Load virtualenvwrapper after paths are set
if [[ -s /usr/local/bin/virtualenvwrapper.sh ]]; then
source /usr/local/bin/virtualenvwrapper.sh
fi

# PYENV
# To use Homebrew directories rather than ~/.pyenv
#export PYENV_ROOT=/usr/local/opt/pyenv  
eval "$(pyenv init -)"

# Load .bashrc if it exits (python definitions)
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
Run Code Online (Sandbox Code Playgroud)

.bashrc 文件具有以下设置:

# allow install and upgrade of global package with pip
syspip(){
PIP_REQUIRE_VIRTUALENV="" pip "$@"
}

# run this for global install or upgrade
# syspip install --upgrade pip setuptools virtualenv

# PIP
# pip should only run if there is a virtualenv currently activated
# this it to prevent accidentally installing a package globally
# use syspip() to install globally
export PIP_REQUIRE_VIRTUALENV=true

# cache pip-installed packages to avoid re-downloading
export PIP_DOWNLOAD_CACHE=$HOME/.pip/cache
Run Code Online (Sandbox Code Playgroud)

我很尴尬地承认我花了大约一个星期的时间试图从大量不同的帖子和教程中拼凑出来。我已经阅读了 pyenv、virtualenv 和 virtualenvwrapper 的文档,但我仍然不清楚如何使其与 pyenv 一起工作。

我希望我已经很好地解释了这一点,并遵守了所有的发帖规则。如果有更好的解决方案(更容易),那么我全神贯注。任何帮助将不胜感激。

提前致谢。

ale*_*oid 2

那么您收​​到的错误意味着您的文件系统中根本没有文件/usr/local/bin/python。它与您正在调整的设置关系不大,但与您正在运行的脚本的期望有关。

您可以检查 的内容virtualenvwrapper.sh并查看它是否包含对 的明确引用吗/usr/local/bin/python?乍一看,您.bash_profile已经VIRTUALENVWRAPPER_PYTHON指向该文件,并且由于该文件不存在 - 您收到一条错误消息。

我不确定 virtualenv 包装器应该如何工作。但是要修复该错误,您需要了解您希望脚本使用哪个 python 实例,并将它们指向该实例,或者创建一个/usr/local/bin/python指向正确的 python 实例的符号链接(link -s在终端中使用命令)。

另一方面,似乎 pyenv 可能尚未正确(或完全)安装 - 正如他们的文档所说,它通过在您此处没有的变量~/.pyenv/shims前面插入来工作。PATH您可以手动添加它.bash_profile,看看是否有帮助(更新后重新加载配置文件source ~/.bash_profile)。

更新:我尝试pyenv使用自制程序进行安装,最后看到了它打印的有关设置的消息:

To enable shims and autocompletion add to your profile:
  if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

To use Homebrew's directories rather than ~/.pyenv add to your profile:
  export PYENV_ROOT=/usr/local/opt/pyenv
Run Code Online (Sandbox Code Playgroud)

你的.bash_profile. 显示什么echo $PATH