从 python 的 venv 运行 docker
我创建了一个 python 模块。使用 python3.5 在 ubuntu/xenial 上运行。我构建了它并上传到 python 存储库。然后我创建了虚拟环境,安装了这个模块并尝试运行。结果我得到:
(hdfnc_venv) svc@PL1LXD-529389:~/$ python3 -m my_package.my_module -h
Traceback (most recent call last):
File "/usr/lib/python3.5/runpy.py", line 184, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.5/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/svc/hdfnc_venv/lib/python3.5/site-packages/my_package/my_module.py", line 4, in <module>
import docker
File "/home/svc/hdfnc_venv/lib/python3.5/site-packages/docker/__init__.py", line 2, in <module>
from .api import APIClient
File "/home/svc/hdfnc_venv/lib/python3.5/site-packages/docker/api/__init__.py", line 2, in <module>
from .client import APIClient
File "/home/svc/hdfnc_venv/lib/python3.5/site-packages/docker/api/client.py", line 222
f'Error while fetching server API version: {e}'
^
SyntaxError: invalid syntax
显然这里存在多个问题。其中之一是这个无效语法
,我认为这是因为python3.5无法识别python3.6中引入的f字符串语法。如果没有 f 字符串,无论如何都会引发异常。
更大的问题是为什么仅仅导入 docker 就会出错。 Docker 已正确安装在本机上,我的 venv 中的模块 docker (5.0.3)
也已正确安装。当我直接从源代码(而不是从我的 venv 安装)在系统中运行该模块时,该模块可以工作。另外,当我以这种方式运行它时,python3.5 工作得很好,所以 invalid_syntax
不再是问题 - 很可能 python 没有到达这部分代码,这意味着它设法导入 docker模块(也是5.0.3)没有任何问题。
I have created a python module. Works on ubuntu/xenial with python3.5. I built it and uploaded to python repository. Then I created virtual environment, installed this module and tried to run. As a result I got:
(hdfnc_venv) svc@PL1LXD-529389:~/$ python3 -m my_package.my_module -h
Traceback (most recent call last):
File "/usr/lib/python3.5/runpy.py", line 184, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.5/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/svc/hdfnc_venv/lib/python3.5/site-packages/my_package/my_module.py", line 4, in <module>
import docker
File "/home/svc/hdfnc_venv/lib/python3.5/site-packages/docker/__init__.py", line 2, in <module>
from .api import APIClient
File "/home/svc/hdfnc_venv/lib/python3.5/site-packages/docker/api/__init__.py", line 2, in <module>
from .client import APIClient
File "/home/svc/hdfnc_venv/lib/python3.5/site-packages/docker/api/client.py", line 222
f'Error while fetching server API version: {e}'
^
SyntaxError: invalid syntax
So apparently there are multiple issues here. One is this invalid syntax
which I suppose is because python3.5 does not recognize f-string syntax introduced in python3.6. Wasn't there an f-string, an exception would be raised anyway.
The bigger problem is why it there is error with just importing docker. Docker is properly installed on this machine, so is the module docker (5.0.3)
in my venv. The module works when I run it directly in the system from the source code, not from my venv installation. Also when I run it this way, python3.5 works just fine, so invalid_syntax
is not a problem anymore - most likely python didn't reach this part of the code, which means it managed to import docker module (also 5.0.3) without any problem.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论