Parallels虚拟机Ubuntu 20.04下virtualenv脚本报bad interpreter错误咨询
问题原因
- 项目所在的
/media/psf/路径是Parallels虚拟机挂载的宿主机共享目录,该类共享文件系统默认挂载参数禁用了shebang解释器的执行权限:即使shebang中指定的Python解释器真实存在且可执行,Linux内核解析脚本首行shebang时仍会被权限规则拦截,因此抛出bad interpreter: Invalid argument错误。 - 手动指定解释器执行
/media/psf/.../python 脚本路径时不需要内核解析shebang,因此可以正常运行。
解决方案
方案1:调整共享目录挂载参数(永久生效)
修改虚拟机内的/etc/fstab文件,为共享目录挂载规则添加exec权限:
/media/psf /media/psf prl_fs sync,nosuid,nodev,relatime,exec 0 0
保存后执行sudo mount -a重新挂载共享目录即可解决问题。
方案2:将虚拟环境部署到虚拟机本地磁盘
将venv虚拟环境创建在Ubuntu本地目录(如~/projects/)而非共享文件夹下,可完全避开共享目录的权限限制。如果需要同步项目代码到宿主机,可使用Git等版本管理工具实现。
方案3:强制setuptools生成env格式的shebang
修改setup.py配置,添加build_scripts参数强制生成的脚本使用/usr/bin/env python作为shebang,激活虚拟环境后会自动匹配当前环境的Python解释器,绕过绝对路径shebang的解析限制:
from setuptools import setup, find_packages setup(name='test_venv', version='0.0.1dev', description='Test', author='Aravind Sundaresan', maintainer='Aravind Sundaresan', packages=find_packages(), scripts=["bin/test_version.py",], # 新增以下配置 options={ 'build_scripts': { 'executable': '/usr/bin/env python', }, }, install_requires=[], zip_safe=False )
修改后重新执行pip install -e .重装包即可生效。
方案4:临时使用手动指定解释器的方式运行
不需要修改任何配置,运行脚本时主动带上虚拟环境Python解释器路径即可:
venv/bin/python venv/bin/test_version.py
内容的提问来源于stack exchange,提问作者Aravind Sundaresan
相关产品推荐
相关产品推荐

