2017-12-21 4 views
1

Ich habe zwei Python-Dateien my_script.pytest.py mit darunter Inhalt.ModuleNotFoundError: Kein Moudle Name <name> in Docker Python

my_script.py

#!/usr/bin/python3 

import os 
import sys 

sys.path.append("/home/user/test") 
import test as count 

data = count.function() 
print(data) 

test.py

#!/usr/bin/python3 

import time 

def function(): 
     print("This is function") 
     return "test" 

Wenn ich my_script.py ausführen, erhalte ich folgendes Ergebnis:

This is function 
test 

I doc erstellt ker Bild von my_script.py mit Dockerfile:

FROM python:3 

ADD my_script.py/

CMD [ "python3", "./my_script.py" ] 

Aber wenn ich seinen Behälter leite, erhalte ich eine Fehlermeldung:

Traceback (most recent call last): 
    File "./my_script.py", line 13, in <module> 
    import test as count 
ModuleNotFoundError: No module named 'test' 

Anfangs dachte ich, der Behälter automatisch für test.py aussehen wird und ausführen seine Funktion, aber es ist nicht. Wie kann ich dieses Problem beheben?

+1

Sie richtig Ihre Module verpacken sollten und installieren, anstatt mit 'sys.path' manuell durcheinander. –

+0

Nun, das auch :) – favoretti

+0

@NilsWerner Du meinst zu sagen, dass ich ein docker für test.py auch erstellen sollte. Dann wird es funktionieren. –

Antwort

2

Ok, ich füge ein bisschen mehr Klarheit basierend auf den Kommentaren unten hinzu. Wo auch immer sich Ihre Dateien auf Ihrem lokalen System befinden, hängt nicht davon ab, wo sie sich in Ihrem Andock-Container befinden.

Bevor Sie also Sachen in einem Container (der im Grunde "ein anderer Server" ist) ausführen können, müssen Sie Dateien von Ihrem lokalen Computer in den Container kopieren.

Um das zu erreichen, was Sie wollen Ihre Dockerfile Bedürfnisse erreichen, um wie folgt aussehen:

FROM python:3 

RUN mkdir -p /home/user/test 
ADD my_script.py /home/user/test/ 
ADD test.py /home/user/test/ 

CMD [ "python3", "/home/user/test/my_script.py" ] 

Und dann können Sie Ihren Weg von Ihrem Skript Mangeln entfernen.

, dass die endgültige my_script.py würde also wie folgt aussehen:

#!/usr/bin/python3 

import os 
import sys 
import test as count 

data = count.function() 
print(data) 
+1

Danke. Aber warum sollte ich "mkdir -p/home/user/test" ausführen? Der Ordner ist bereits erstellt –

+0

In Docker? Womit? 'FROM python: 3' hat kein'/home/user/test' drin Ich bin mir zu 99% sicher. – favoretti

+0

Okay, ich habe das auch gemacht, aber immer noch den gleichen Fehler. –

Verwandte Themen