为啥我不能“停用”pyenv / virtualenv?如何“修复”安装
Posted
技术标签:
【中文标题】为啥我不能“停用”pyenv / virtualenv?如何“修复”安装【英文标题】:Why can't I "deactivate" pyenv / virtualenv? How to "fix" installation为什么我不能“停用”pyenv / virtualenv?如何“修复”安装 【发布时间】:2017-10-11 15:33:39 【问题描述】:我在新安装的 Ubuntu 16.04 上,考虑到使用最新版本的 pandas 进行开发,我使用了 Python 3.6.0虚拟环境。
选择 3.6.0 的一个原因是因为我在某处读到这个版本的 Python 可以本地处理虚拟环境,即无需安装任何其他东西[无论如何安装 3.6.0 本身而不替换系统范围的 Python,这将有几乎肯定是错的,实际上我之前必须提供一个虚拟环境]。
我乐观地认为一切都会朝着正确的方向发展(包括我的知识),因此,并没有过多关心以下之间的差异:pyenv、pyenv-virtualenv、pyvenv 等... 所以我不太记得我安装了什么,反正我只使用了
apt
和pip
/pip3
,试图在virtualenv 可用时将更改限制在其中
除了(可能)我没有为 virtualenvs 创建目录($ mkdir ~/.virtualenvs
命令)之外,我大致遵循了这个 tutorial。
现在我的用户被困在(general)
环境中,我无法离开。
情况
从登录后一开始,在没有激活任何环境的情况下,bash 给我一个修改后的提示,我似乎无法得到deactivate
、source deactivate
等通常的提示...
(general) $ deactivate
pyenv-virtualenv: deactivate must be sourced. Run 'source deactivate' instead of 'deactivate'
(general) $ source deactivate
pyenv-virtualenv: deactivate 3.6.0/envs/general
(general) $ pyvenv deactivate
pyenv: pyvenv: command not found
The `pyvenv` command exists in these Python versions: 3.6.0
(general) $
您会看到(general)
前缀仍保留在提示符中。
我也有这种 pyenv/virtualenv 设置影响系统活动的症状(例如,在尝试从命令行安装 hplip 时,安装程序在尝试识别我的操作系统时感到困惑,最终失败 - 我不得不这样做来自另一个用户,然后它起作用了),所以我需要将其恢复为干净状态。
注意。我不确定我的安装是否真的那么错误,也许只是我发出了错误的命令或我遇到了一些常见的陷阱。
问题
我怎样才能deactivate
(一般)环境
如何判断我的安装是否错误,以及如何修复它
我怎样才能安全地从此安装恢复并获得更合适的安装?
我已经阅读了这个question,但它与我的情况并没有太大关系
This one 似乎更相关,因为它强调 a) python venv
应该是首选; b) 它在 Python >=3.3 上可用,c) ubuntu-xenial 没有默认安装它,d) 它给出了安装它的包名。
但我仍然不确定在安装它们之前要卸载什么。
更多信息
这是 TAB 完成、命令和目录列表的输出,以显示我所处的环境:
(general) $ cat .py <TAB>
.pyenv/ .python_history
(general) $ cat .pyenv/ <TAB>
.agignore completions/ LICENSE shims/ versions/
bin/ CONDUCT.md Makefile src/ .vimrc
cache/ .git/ plugins/ test/
CHANGELOG.md .gitignore pyenv.d/ .travis.yml
COMMANDS.md libexec/ README.md version
(general) $ cat .pyenv/version
general
(general) $ ls -l ~/.pyenv/versions
totale 12
drwxrwxr-x 3 myuser myuser 4096 apr 20 13:50 ./
drwxrwxr-x 13 myuser myuser 4096 apr 20 13:50 ../
drwxr-xr-x 7 myuser myuser 4096 apr 20 13:50 3.6.0/
lrwxrwxrwx 1 myuser myuser 48 apr 20 13:50 general -> /home/myuser/.pyenv/versions/3.6.0/envs/general/
我尝试列出已安装的内容,但我担心pip3 list
得到的答案是针对我卡住的环境,这掩盖了我在之前安装的任何内容给它。
可能只是我错误地从我的主目录安装了 pyenv 吗?删除/移动.pyenv
目录就足够了吗?我没有足够的信心不问就去做。
【问题讨论】:
我检查了我没有安装pyenv
,也没有安装virtualenv
,甚至没有安装virtualenvwrapper
。所以我一定只与python3 -m venv
合作过。如果我的主目录中有.pyenv
文件夹,是否正确?
您解决了吗?有完全相同的问题。
是的,现在问题已经解决了。我通过删除 .pyenv
目录从我的用户空间中完全删除了 pyenv。之后我才明白一定是因为pyenv general xxx
这个命令,afaicu只是在你的home目录下创建了一个.pyenv-version
文件。所以,首先尝试,删除它
【参考方案1】:
DEACTIVATE 默认 PyEnv General 的方法是 --pyenv uninstall 3.6.0/envs/general
(general) dhankar@dhankar-VPCEB44EN:~/.pyenv$ pyenv uninstall 3.6.0/envs/general
pyenv-virtualenv: remove /home/dhankar/.pyenv/versions/3.6.0/envs/general? y
dhankar@dhankar-VPCEB44EN:~/.pyenv$
双重确保 PyENV 已被移除 --
dhankar@dhankar-VPCEB44EN:~/.pyenv$ pyenv versions
pyenv: version `general' is not installed (set by /home/dhankar/.pyenv/version)
system
3.6.0
3.6.5
dhankar@dhankar-VPCEB44EN:~/.pyenv$
还使其记录在案 - 在卸载之前共享同一命令的终端输出。
(general) dhankar@dhankar-VPCEB44EN:~/.pyenv$ pyenv versions
system
3.6.0
3.6.0/envs/general
3.6.5
* general (set by /home/dhankar/.pyenv/version)
(general) dhankar@dhankar-VPCEB44EN:~/.pyenv$
【讨论】:
以上是关于为啥我不能“停用”pyenv / virtualenv?如何“修复”安装的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Virtual Populate 不能在 Node js 和 mongoose 上运行?场景:产品和用户评论
为啥 AWS 将停用具有多容器支持的 Elastic Beanstalk?
Flutter & Navigator & ImagePicker : 为啥我可以进入下一页?查找已停用小部件的祖先是不安全的