Ich bin mir nicht sicher, ob dies möglich ist, aber ich frage mich, ob es möglich wäre, nur *.py
Dateien mit dem volumes
Teil von fig.yml
einzuhängen.
Ich versuche, ein Verzeichnis zu mounten, das ein Python-Paket enthält. Mein Dockefile sieht so aus:
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
Das Problem ist, dass wenn ich ein fig.yml
wie folgt habe:
python:
build: .
volumes:
- .:/code/
Führen Sie dann aus, versuchen Sie, die mit meiner Python-App installierte CLI auszuführen. Es funktioniert nicht, da pip install -e .
einige Verzeichnisse mit dem erstellten Python-Paket unter /code/
. Wenn ich dann mein lokales Quellcodeverzeichnis über dieses Verzeichnis mounte, werden diese Build-Verzeichnisse entfernt und der Befehl schlägt fehl.
$ 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
Wenn ich also nur .py
Dateien mounten könnte, würde es all das andere Zeug nicht überschreiben. Ich bin mir nicht sicher, ob dies aus der Ferne möglich ist, und wenn nicht, haben Sie Tipps zur Verwendung von fig für die Entwicklung von Python-Paketen/
Dies ist bei Docker-Volumes leider nicht möglich.
Ist es möglich, pip install
zu bringen, die Dateien in einem anderen Verzeichnis außerhalb von /code
abzulegen und Python so zu konfigurieren, dass es dort nachschaut? Wenn man sich die Pip-Dokumente ansieht, sieht es so aus, als ob --root
oder --target
den Zweck erfüllen könnten.
Die beste Lösung, die ich gefunden habe, bestand darin, nur den eigentlichen Code und die Testverzeichnisse zu mounten und die anderen Dateien unberührt zu lassen.
Auf diese Weise werden Quelldateien ohne Neuaufbau aktualisiert, aber die kompilierten Dateien werden nicht überschrieben.
python:
build: .
volumes:
- dc_campaign_finance_scraper:/code/dc_campaign_finance_scraper
- test:/code/test
Das hat mich stundenlang verrückt gemacht, danke @saulshanabrook
Hilfreichster Kommentar
Die beste Lösung, die ich gefunden habe, bestand darin, nur den eigentlichen Code und die Testverzeichnisse zu mounten und die anderen Dateien unberührt zu lassen.
Auf diese Weise werden Quelldateien ohne Neuaufbau aktualisiert, aber die kompilierten Dateien werden nicht überschrieben.