gpt4 book ai didi

azure - 如何设置导入以便在不安装 python 应用程序的情况下运行它,并且仍然能够使用诗歌运行 tox?

转载 作者:行者123 更新时间:2023-12-03 02:23:55 24 4
gpt4 key购买 nike

我有一个 python 3.6 代码库,需要将其安装在环境的 site-packages 目录中才能调用和使用。将其移动到 docker 后,我决定应该在 docker 容器和主机之间设置一个共享卷,以避免在容器上复制和安装代码,并且每次更改代码时都必须重新构建想运行它。为了实现这一目标,我必须将许多导入语句从相对更改为绝对。以下是应用程序的结构:

-root
-src
-app
-test

为了从根目录运行应用程序而不安装它,我必须更改许多导入语句

from app import something

至:

import src.app.something

问题是我使用诗歌在 azure 构建代理上构建应用程序,并使用 tox 来运行测试。我的 pyproject.toml 文件的相关部分如下所示:

[tool.poetry]
name = "app"
version = "0.1.0"
packages = [{include = 'app', from='src'}]

我的 tox.ini 文件的相关部分如下所示:

[tox]
envlist = py36, bandit, black, flake8, safety
isolated_build = True

[testenv:py36]
deps =
pytest
pytest-cov
pytest-env
pytest-mock
fakeredis
commands =
pytest {posargs} -m "not external_service_required" --junitxml=junit_coverage.xml --cov report=html --cov-report=xml:coverage.xml

我不是毒物或诗歌方面的专家,但据我所知,问题是 src 目录没有包含在构建工件中,只有内部应用程序目录包含在内,所以我添加了一个父目录目录并将目录结构更改为:

-root
-app
-src
-app
-test

然后将诗歌配置更改为以下内容以包含 src 目录

[tool.poetry]
name = "app"
version = "0.1.0"
packages = [{include = 'src', from='app'}]

现在,当我更改测试中的导入时:

from app import something

对此:

from app.src.app import something 

导入在 Pycharm 中被识别,但是当我尝试运行 tox -r 时,出现以下错误:

E   ModuleNotFoundError: No module named 'app'

我不明白 tox 如何安装应用程序,以及我需要指定哪种包结构才能从代码库目录和站点包调用代码。我查看了一些示例项目,发现它们不使用isolated_build标志,而是使用skip_dist标志,但不知何故,他们还在运行测试之前将应用程序安装在站点包中。

任何帮助将不胜感激。

规范:

poetry version: 1.1.6
python version:3.6.9
tox version:3.7
environment: azure windows build agent

最佳答案

您必须将导入更改回 from app import somesrc 部分相对于作为可交付成果的代码来说是完全 transient 的。添加另一个 app 目录也是如此,您的初始项目结构很好。

不过,从相对导入转向绝对导入是正确的,因此此后所需要做的就是告诉容器内的 python 运行时 root/src 应该是 PYTHONPATH 的一部分:

export PYTHONPATH="{PYTHONPATH}:/path/to/app/src"

或者,您也可以在导入包之前更新 python 代码中的路径:

import sys
sys.path.append("/path/to/root/src")

import app # can be found now
<小时/>

简单地说,以这种方式干预解释器有点老套,但据我所知,它应该可以正常工作,没有任何问题。

关于azure - 如何设置导入以便在不安装 python 应用程序的情况下运行它,并且仍然能够使用诗歌运行 tox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67806642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com