Você não deve sobrepor o PYTHONPATH
ao seu caminho, mas anexá-lo; caso contrário, o sistema não encontrará os pacotes Python instalados.
- Opção 1:
RUN export PYTHONPATH="$PYTHONPATH:/app"
- Opção 2:
ENV PYTHONPATH="$PYTHONPATH:/app"
O CMD
do meu dockerfile é este: ["python", "myproject/start_slide_server.py"]
No entanto, para que isso funcione, preciso definir o PYTHONPATH
to /app
, que é o diretório pai de myproject
Se eu iniciar o processo de encaixe e substituir CMD
por bash
, posso executar o seguinte
root@42e8998a8ff7:/app# export PYTHONPATH=.
root@42e8998a8ff7:/app# python myproject/start_slide_server.py
* Running on http://0.0.0.0:8090/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 236-035-556
E isso funciona como esperado
Agora adiciono a linha
RUN export PYTHONPATH=/app
antes
CMD ["python" , "myproject/start_slide_server.py"]
apenas falhou
Traceback (most recent call last):
File "/app/myproject/start_slide_server.py", line 23, in <module>
from myproject import env
ImportError: No module named myproject
Parece que a linha RUN
não tem nenhum impacto
Eu realmente não quero definir ENV
no nível de comando docker
porque esse PYTHONPATH
não será alterado de uma imagem para a próxima.
Como posso conseguir isso?
Eu posso usar a diretiva ENV
ENV PYTHONPATH /app
Você não deve sobrepor o PYTHONPATH
ao seu caminho, mas anexá-lo; caso contrário, o sistema não encontrará os pacotes Python instalados.
RUN export PYTHONPATH="$PYTHONPATH:/app"
ENV PYTHONPATH="$PYTHONPATH:/app"