Ubuntu 14.04报错:/usr/local/bin/python3: bad interpreter: No such file or directory

11

嗨,我的Python安装在不同的目录中,我正在使用一个基于Mac的Docker镜像,在shell脚本中从其他文件夹引用shebang行时,它会引用/user/local/bin/python3。

我的Python安装路径

Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/myuser/project', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']
>>> 

那么,在不更改shebang行的情况下,是否有一种方法可以重定向或链接到我的Python3安装程序,以解决此错误?

推荐在给定路径中安装Python3吗?

请给予建议。

2个回答

4
如果你无法修改文件的shebang,并且你可以访问创建Docker镜像的Dockerfile,则可以添加一个命令指令来创建符号链接:ln -s /usr/bin/python3 /usr/local/bin/
如果你无法访问Dockerfile,则可以在运行的Docker实例内部运行上述命令。这样应该可以解决问题,而无需修改文件。
参考链接:https://docs.docker.com/engine/reference/builder/#cmd

CMD ["ln -s" , "/usr/bin/python3", "/usr/local/bin/"] 可以工作吗?我的意思是说,我是否需要这样写:CMD ["ln -s" , "/usr/bin/python3", "/usr/local/bin/pyhon3"]。我对Linux系统不熟悉。 - Karn_way
双向操作均应无问题。假设python3在/usr/bin/中,如果不确定它是否位于那里,则可以改为执行以下操作:RUN /bin/bash -c 'ln -s $(which python3) /usr/local/bin/'。不确定这种形式是否适用于CMD - xmonk
另一个选项是使用:RUN 而不是 CMD。我现在记不清我在哪里读到 CMD 是首选了。但是无论是 CMD 还是 RUN 都应该可以正常工作。 - xmonk
好的,我刚刚在我的Docker容器中尝试了以下内容: CMD [ "sh", "-c", "ln -s", "$(which python3)", "/usr/local/bin/" ],这对我有效。 - xmonk

0

你可以像往常一样将shebang设置为"/usr/bin/env python",然后适当地设置路径,以便正确的Python版本出现在可执行文件的路径上。在bash中,你可以使用以下命令在命令行上设置路径:

PATH=python/path:$PATH app

有时候我会忽略shebang,而是输入python/path/python $(which app)来控制使用哪个Python解释器。

是的,这是真的,但在我的情况下,我正在使用一个Docker镜像。由于某种原因,我无法更改它或不想更改我的Docker镜像,所以为了我的开发环境目的,是否有任何方法可以保持shebang不变,使其正常工作? - Karn_way

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接