Как добавить путь к PYTHONPATH в Dockerfile

Как добавить путь к PYTHONPATH в Dockerfile? Чтобы при запуске контейнера был правильный PYTHONPATH? Я совершенно новичок в Докере.

Я добавил ENV PYTHONPATH "${PYTHONPATH}:/control" в Dockerfile, так как хочу добавить каталог /control в PYTHONPATH.

Когда я получаю доступ к bash контейнера с помощью docker exec -it trusting_spence bash, открываю python и запускаю команды ниже, каталог control отсутствует в списке.

import sys print(sys.path)

FROM python:2
RUN pip install requests pymongo

RUN mkdir control

COPY control_file/ /control

ENV PYTHONPATH "${PYTHONPATH}:/control"

CMD ["python","control/control_file/job.py"] 
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
49
0
44 290
3

Ответы 3

Просто добавьте запись ENV в свой Dockerfile:

ENV PYTHONPATH "${PYTHONPATH}:/your/custom/path"

Или установите PYTHONPATH в свой сценарий запуска.

Я безуспешно попробовал ваше предложение, я отредактировал свое исходное сообщение, включив в него свои шаги. Не могли бы вы подсказать, что я делаю не так?

arcoxia tom 03.04.2018 18:50

Вы пробовали с исправленной опечаткой в ​​строке? "$ {PYTHONPATH}: / ваш / пользовательский / путь"

Miek 13.07.2018 19:01

по той или иной причине это все еще просто перезаписывает мой PYTHONPATH. Кроме того, пока это изменяет переменную ENV, мой путь в соответствии с python -c "import sys; for p in sys.path: print(p)" все еще не изменился и содержит только старый (казалось бы, перезаписанный) PYTHONPATH, в котором ни одно из изменений

physincubus 02.10.2018 22:05

Кто-нибудь вручит этому парню медаль. Большое спасибо. Работал как шарм. :)

Pramesh Bajracharya 26.02.2020 15:08

Вы правильно устанавливаете путь Python, но ваша команда не запускается оболочкой, поэтому переменная среды PYTHONPATH не рассматривается.

измените ваш CMD с формы "exec" на форму "оболочки":

CMD python control/control_file/job.py


Из Документы:

Note: Unlike the shell form, the exec form does not invoke a command shell. This means that normal shell processing does not happen. For example, CMD [ "echo", "$HOME" ] will not do variable substitution on $HOME. If you want shell processing then either use the shell form or execute a shell directly, for example: CMD [ "sh", "-c", "echo $HOME" ]. When using the exec form and executing a shell directly, as in the case for the shell form, it is the shell that is doing the environment variable expansion, not docker.

Сделайте это гораздо проще. Таким образом добавьте путь Python в ваш файл .env в виде строки.

PYTHONPATH=/app/project_source/

Другие вопросы по теме