No estoy seguro de si esto es posible, pero me pregunto si sería posible montar solo, digamos, archivos *.py
con la parte volumes
de fig.yml
.
Estoy tratando de montar un directorio que tiene un paquete de Python. Mi Dockefile se ve así:
FROM python:3
ADD . /code/
WORKDIR /code
RUN pip install -r requirements-testing.txt -e .
ENV LC_ALL C.UTF-8
ENV LANG C.UTF-8
El problema es que cuando tengo un fig.yml
como este:
python:
build: .
volumes:
- .:/code/
Y luego ejecute, intente ejecutar la CLI instalada con mi aplicación Python, no funciona, porque pip install -e .
crea algunos directorios con el paquete de Python integrado en /code/
. Luego, cuando monte mi directorio de código fuente local sobre ese directorio, elimina esos directorios de compilación y el comando falla.
$ fig run python dc-campaign-finance-scraper
Traceback (most recent call last):
File "/usr/local/bin/dc-campaign-finance-scraper", line 5, in <module>
from pkg_resources import load_entry_point
File "/usr/local/lib/python3.4/site-packages/pkg_resources.py", line 2697, in <module>
working_set.require(__requires__)
File "/usr/local/lib/python3.4/site-packages/pkg_resources.py", line 669, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/local/lib/python3.4/site-packages/pkg_resources.py", line 572, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: dc-campaign-finance-scraper==0.5.1
Entonces, si solo pudiera montar archivos .py
, no sobrescribiría todas esas otras cosas. No estoy seguro de si esto es remotamente posible, y si no, si tiene algún consejo sobre el uso de fig para el desarrollo de paquetes de Python /
Me temo que esto no es posible con los volúmenes de Docker.
¿Es posible obtener pip install
para colocar los archivos en un directorio diferente, fuera de /code
, y configurar Python para que busque allí? Echando un vistazo a los documentos de Pip , parece que --root
o --target
podrían hacer el truco.
La mejor solución que encontré fue solo montar el código real y los directorios de pruebas, y dejar los otros archivos intactos.
De esta forma, los archivos de origen se actualizarán sin reconstruir, pero no sobrescribirán los archivos compilados.
python:
build: .
volumes:
- dc_campaign_finance_scraper:/code/dc_campaign_finance_scraper
- test:/code/test
Esto me estaba volviendo loco durante horas, gracias @saulshanabrook
Comentario más útil
La mejor solución que encontré fue solo montar el código real y los directorios de pruebas, y dejar los otros archivos intactos.
De esta forma, los archivos de origen se actualizarán sin reconstruir, pero no sobrescribirán los archivos compilados.