@valerr007

Docker образ на основе python требует обращение к папке через «/». Но я писал код на windows, как можно это исправить?

Здравствуйте!

Я написал проект на python.
Собрал образ докер. Запустил.
Всё работает правильно до момента пока не происходит обращение к папке из проекта.

path = r'.\offers'
        if os.listdir(path):


Докер выдает ошибку:

File "/app/main.py", line 246, in welcome_response

    if os.listdir(path):

FileNotFoundError: [Errno 2] No such file or directory: '.\\offers'


Я так понимаю что в докер контейнере используется файловая система типа unix , и он требует "/" - таких бэкслешей.

Ради эксперимента я поменял бэкслеши и всё заработало.

Только как сделать процесс кодинга удобным, чтобы я мог писать код на винде, а собирать образ через докер (просто с базового образа python). Или обязательно нужен и образ windows?

Вот код Dockerfile
FROM python:3.10
RUN mkdir /app
WORKDIR /app
COPY requirements.txt .
RUN python -m pip install -r requirements.txt
COPY . .
CMD ["python", "main.py"]


Вот структура проекта 6284ea6b02f2f850974805.png
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Почитать документацию, конечно.
Либо собирай пути через pathlib, либо через os.path, на совсем худой конец есть os.sep.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@stepanof23
DevOps/DataOps
Можно задать переменную delimiter, которой будет присваиваться значение '/' на линуксе и '\' на windows
Проверять систему можно с помощью platform из библиотеки sys
Таким образом в процессе кодинга в качестве разделителя всегда будет использоваться одно и то же - переменная delimiter.

from sys import platform
if platform == "linux" or platform == "linux2":
    delimiter = '/'
elif platform == "win32":
    delimiter = '\'
path = delimiter + 'offers'
        if os.listdir(path):
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы