Sco*_*d77 12 python virtualenv virtualenvwrapper anaconda
我正在使用virtualenv来切换我的python dev env.但是当我跑步时workon my_env
,我遇到了这样的错误信息:
Error: deactivate must be sourced. Run 'source deactivate'
instead of 'deactivate'.
Usage: source deactivate
removes the 'bin' directory of the environment activated with 'source
activate' from PATH.
Run Code Online (Sandbox Code Playgroud)
在google上进行一些搜索之后,似乎workon
在/usr/local/bin/virtualenvwrapper.sh中定义了调用deactivate
.并且在Anaconda的bin中有一个同名的脚本,因此它会被workon错误地调用.
有什么建议可以解决这场冲突吗?
bpi*_*pat 15
一个对我deactivate
有用的解决方案是在Anaconda的bin中重命名:
mv deactivate conda-deactivate
Tho*_*ote 10
我同意@FredrikHedman的评论,即在anaconda/miniconda bin
目录中重命名脚本有可能是脆弱的.他的全部帖子让我觉得我觉得这是一个更有力的答案.(谢谢!)
deactivate
我们可以简单地调用是否调用该函数来调用该文件,而不是简单地丢弃通过调用抛出的任何错误.如前所述,virtualenv和virtualenvwrapper创建了一个名为的函数deactivate
;*condas调用同名的脚本文件.
因此,在virtualenvwrapper.sh
脚本中,我们可以更改以下两行来测试是否deactivate
只是可调用:
type deactivate >/dev/null 2>&1
if [ $? -eq 0 ]
Run Code Online (Sandbox Code Playgroud)
更严格的测试是否是shell函数:
if [ -n $ZSH_VERSION ] ; then
nametype="$(type -w deactivate)"
else
nametype="$(type -t deactivate)"
fi
if [ "${nametype##* }" == "function" ]
Run Code Online (Sandbox Code Playgroud)
此更改可避免触发原始问题中指出的虚假错误,但不会冒着将其他有用错误或输出重定向到静默遗忘的风险.
注意比较中的变量替换nametype
.这是因为输出type -w
下zsh
返回类似" name: type
",而不是type -t
在bash
它返回简单的" type
".如果存在任何空格,则替换将删除最后一个空格字符的所有内容,仅保留类型值.这无害无益bash
.
(感谢@toprak的zsh
测试和正确的标志type -w
,在zsh下.我期待更多的跨shell编码技巧!)
与以往一样,我感谢建设性的反馈和评论!
您可以编辑 /usr/local/bin/virtualenvwrapper.sh 以指向它应该引用的deactivate
任何内容的绝对路径。deactivate
归档时间: |
|
查看次数: |
4511 次 |
最近记录: |