从 python 的 venv 运行 docker

发布于 2025-01-19 22:33:05 字数 1423 浏览 1 评论 0原文

我创建了一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文