Não tenho certeza se isso é possível, mas gostaria de saber se seria possível montar apenas, digamos, *.py
arquivos com a parte volumes
de fig.yml
.
Estou tentando montar um diretório que contém um pacote python. Meu Dockefile se parece com isto:
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
O problema é que quando eu tenho um fig.yml
como este:
python:
build: .
volumes:
- .:/code/
E então tente executar o CLI instalado com meu aplicativo Python, ele não funciona, porque pip install -e .
cria alguns diretórios com o pacote python construído em /code/
. Então, quando eu monto meu diretório de código-fonte local sobre esse diretório, ele remove o diretório de construção e o comando falha.
$ 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
Portanto, se eu pudesse montar apenas .py
arquivos, isso não sobrescreveria todas as outras coisas. Não tenho certeza se isso é remotamente possível, e se não, se você tem alguma dica usando fig para desenvolvimento de pacote python /
Isso não é possível com volumes Docker, infelizmente.
É possível fazer pip install
colocar os arquivos em um diretório diferente, fora de /code
, e configurar o Python para olhar lá? Olhando os documentos do --root
ou --target
podem resolver o problema.
A melhor solução que encontrei foi apenas montar o código real e os diretórios de testes, e deixar os outros arquivos intactos.
Desta forma, os arquivos de origem serão atualizados sem reconstruir, mas não sobrescreverá os arquivos compilados.
python:
build: .
volumes:
- dc_campaign_finance_scraper:/code/dc_campaign_finance_scraper
- test:/code/test
Isso estava me deixando louco por horas, obrigado @saulshanabrook
Comentários muito úteis
A melhor solução que encontrei foi apenas montar o código real e os diretórios de testes, e deixar os outros arquivos intactos.
Desta forma, os arquivos de origem serão atualizados sem reconstruir, mas não sobrescreverá os arquivos compilados.