Docker容器内pyinstaller无法使用
·
问题复现
若以如下方式启动python容器
docker run -it --rm python:3.13.7 /bin/bash
创建示例代码
cat > main.py <<EOF
if __name__ == "__main__":
print("Hello World!")
EOF

测试代码
python main.py

在容器内完成安装依赖并进行打包时
pip install --no-color --progress-bar off pyinstaller
在容器中具有资源限制必须关闭进度条和颜色否则会导致安装失败。

执行打包程序
pyinstaller --onefile --console main.py
执行后出现如下错误:
PermissionError: [Errno 1] Operation not permitted: ‘/usr/local/bin/python3.13’
错误栈如下:
....
258 INFO: Module search paths (PYTHONPATH):
['/usr/local/lib/python313.zip',
'/usr/local/lib/python3.13',
'/usr/local/lib/python3.13/lib-dynload',
'/usr/local/lib/python3.13/site-packages',
'/usr/local/lib/python3.13/site-packages/setuptools/_vendor',
'/root']
Traceback (most recent call last):
File "/usr/local/bin/pyinstaller", line 7, in <module>
sys.exit(_console_script_run())
~~~~~~~~~~~~~~~~~~~^^
....
File "/usr/local/lib/python3.13/subprocess.py", line 1857, in _execute_child
self._posix_spawn(args, executable, env, restore_signals, close_fds,
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
p2cread, p2cwrite,
^^^^^^^^^^^^^^^^^^
c2pread, c2pwrite,
^^^^^^^^^^^^^^^^^^
errread, errwrite)
^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/subprocess.py", line 1801, in _posix_spawn
self.pid = os.posix_spawn(executable, args, env, **kwargs)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 1] Operation not permitted: '/usr/local/bin/python3.13'
解决方案
该问题是由于pyinstaller 在运行依赖一些系统组件,在python:3.13.7镜像中不具备权限。
建议更换镜像到具有开发环境的python镜像,例如:“python:3.13.7-bookworm”,bookworm表示debian的系统版本。
docker run -it --rm python:3.13.7-bookworm /bin/bash
再次打包可以发现已经正常运行,但是任然有一些ldd错误信息
pyinstaller --onefile --console main.py

提示没有读取对应动态库的权限 ldd: error: you do not have read permission for `/usr/local/lib/python3.13/lib-dynload/fcntl.cpython-313-aarch64-linux-gnu.so’
更多推荐
所有评论(0)