在部署的服务器中使用包含的 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
- Try to avoid spaces in directory names;
os.path.join
accommodates spaces
- You describe
XML files
but your code references xml files
- You don't include a full repro of your issue making it more difficult to help you
我有 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
- Try to avoid spaces in directory names;
os.path.join
accommodates spaces- You describe
XML files
but your code referencesxml files
- You don't include a full repro of your issue making it more difficult to help you