在部署的服务器中使用包含的 XML 文件

Use included XML files in deployed server

我有 xml 个文件驻留在这样的目录中

src
 |---lib
 |    |---folder
 |    |    |---XML files
 |    |---script.py
 |---app.py

app.py 文件 运行 包含 script.py 中的代码,在 script.py 中它需要 XML 文件。当我 运行 本地服务器 (window) 时,我可以只使用相对路径“lib\folder\'xml files'”。但是当我将我的服务器部署到云 运行 时,它说文件不存在。

我试图通过在 script.py

中执行此操作来指定绝对路径
package_directory = os.path.dirname(os.path.abspath(__file__))
path = os.path.join(package_directory, "folder\'xml files")

并尝试将所有向后破折号改为向前破折号,但错误仍然存​​在。

在 dockerfile 中,我有这个:

ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . ./

我相信复制 src 文件夹中的所有内容,除了 .dockerignore 中指定的内容,我有这些内容:

Dockerfile
README.md
*.pyc
*.pyo
*.pyd
__pycache__
.pytest_cache

因为 Cloud 运行 需要一个容器,所以对您来说一个很好的测试是在本地创建容器并 运行 它。我怀疑是您的容器而不是 Cloud 运行.

不正确

我为您的代码创建了以下重现:

.
├── app.py
├── Dockerfile
└── lib
    ├── folder
    │   └── XML files
    │       └── test
    ├── __init__.py
    └── script.py

app.py:

from lib import script

script.foo()

script.py:

import os

def foo():
    package_directory = os.path.dirname(os.path.abspath(__file__))
    path = os.path.join(package_directory, "folder/XML files")

    for f in os.listdir(path):
        if os.path.isfile(os.path.join(path,f)):
            print(f)

Dockerfile:

FROM docker.io/python:3.9.9

ENV APP_HOME /app
WORKDIR ${APP_HOME}

COPY . ./

ENTRYPOINT ["python","app.py"]

而且,当我构建|运行 容器时,它会正确报告 test:

Q="70734734"

podman build \
--tag=${Q} \
--file=./Dockerfile \
.

podman run \
--interactive --tty \
localhost/${Q}

我相信,如果我将它推送到云端 运行,它也能在那里正常工作。

NOTE

  1. Try to avoid spaces in directory names; os.path.join accommodates spaces
  2. You describe XML files but your code references xml files
  3. You don't include a full repro of your issue making it more difficult to help you