【发布时间】:2017-10-19 23:35:08
【问题描述】:
当 python 脚本应该从 pyenv virtualenv 运行时,文件的正确 shebang 是什么?
作为一个示例测试用例,我的系统 (OSX) 上的默认 python 没有安装 pandas。 pyenv virtualenv venv_name 可以。我尝试从 virtualenv 获取 python 可执行文件的路径。
$ pyenv activate venv_name
(venv_name)$ which python
/Users/username/.pyenv/shims/python
所以我做了我的例子script.py:
#!/Users/username/.pyenv/shims/python
import pandas as pd
print 'success'
但是当我尝试运行脚本时,我得到了一个错误:
(venv_name) $ ./script.py
./script.py: line 2: import: command not found
./script.py: line 3: print: command not found
尽管在命令行上运行该路径可以正常工作:
(venv_name) $ /Users/username/.pyenv/shims/python script.py
success
(venv_name) $ python script.py # also works
success
什么是合适的shebang?理想情况下,我想要一些通用的东西,以便它指向我当前 venv 的 python。
【问题讨论】:
-
我经常使用它,而且效果很好。我的 shebang 的一个例子很好用:
#!/home/dslima90/.virtualenvs/production_enviroment/bin/python,也许检查你的路径?你不是想念 bin 吗? -
对不起,我的 devel 文件夹中有我的 python 解释器的别名,这就是为什么我的工作(在开发中)......无论如何
#!/usr/bin/env python应该为你做......你可以试试命令行之前。看看它是否调用了正确的解释器。 -
你可以用
od -c script.py检查#!是否真的是前两个字符。 -
@xgord 因此排除了一种可能的原因。这也可能值得检查:stackoverflow.com/questions/9988125/…
.../shims/python是另一个脚本吗? -
@VPfB 哇,是的,你是对的。事实证明,它只是一个在最后调用
... exec $pyenv_python的bash 脚本。该文件由pyenv创建,我只是假设它会复制或链接python 可执行文件,但事实并非如此。谜团解开了!
标签: python python-2.7 pyenv