it-swarm.com.de

Meine eigenen Module können nicht in Python importiert werden

Es fällt mir schwer zu verstehen, wie das Importieren von Modulen in Python funktioniert (ich habe es auch noch nie in einer anderen Sprache gemacht).

Sagen wir, ich habe:

myapp/__init__.py
myapp/myapp/myapp.py
myapp/myapp/SomeObject.py
myapp/tests/TestCase.py

Jetzt versuche ich so etwas zu bekommen:

myapp.py
===================
from myapp import SomeObject
# stuff ...

TestCase.py
===================
from myapp import SomeObject
# some tests on SomeObject

Allerdings mache ich definitiv etwas falsch, da Python nicht erkennen kann, dass myapp ein Modul ist:

ImportError: No module named myapp
94
n0pe

In Ihrem speziellen Fall scheint es, als würden Sie versuchen, SomeObject aus den Skripts myapp.py und TestCase.py zu importieren. Von myapp.py aus tun

import SomeObject

da es im selben Ordner liegt. Tun Sie für TestCase.py

from ..myapp import SomeObject

Funktioniert jedoch nur, wenn Sie TestCase aus dem Paket importieren. Wenn Sie python TestCase.py direkt ausführen möchten, müssen Sie sich mit Ihrem Pfad befassen. Dies kann in Python gemacht werden:

import sys
sys.path.append("..")
from myapp import SomeObject

obwohl das im Allgemeinen nicht empfohlen wird.

Wenn andere Personen Ihr Python-Paket verwenden möchten, sollten Sie im Allgemeinen distutils verwenden, um ein Setup-Skript zu erstellen. Auf diese Weise kann jeder mit einem Befehl wie python setup.py install Ihr Paket problemlos installieren, und es ist überall auf dem Computer verfügbar. Wenn Sie das Paket ernst meinen, können Sie es sogar in den Python-Paketindex aufnehmen, PyPI .

74
David Robinson

Die Funktion import sucht nach Dateien in Ihrer PYTHONPATH-Umgebung. Variable und Ihr lokales Verzeichnis. Sie können also entweder alle Ihre Dateien im selben Verzeichnis ablegen oder den Pfad in ein Terminal exportieren:

export PYTHONPATH="$PYTHONPATH:/path_to_myapp/myapp/myapp/"
30
Zenon

exportpfad ist ein guter Weg. Eine andere Möglichkeit ist das Hinzufügen einer .pth-Datei zum Standort Ihrer Site-Packages . Auf meinem Mac speichert mein Python Site-Pakete in/Library/Python (siehe unten)

/Library/Python/2.7/site-packages

Ich habe eine Datei namens awesome.pth unter /Library/Python/2.7/site-packages/awesome.pth erstellt und in die Datei den folgenden Pfad eingefügt, der auf meine großartigen Module verweist

/opt/awesome/custom_python_modules
9
jmontross

Du kannst es versuchen

from myapp.myapp import SomeObject

da Ihr Projektname mit myapp.py identisch ist, wird das Projektdokument zuerst durchsucht

4
阿东刘

In Ihrem ersten myapp-Verzeichnis können Sie eine setup.py -Datei und zwei Python-Codes in setup.py hinzufügen

from setuptools import setup
setup(name='myapp')

verwenden Sie in Ihrem ersten myapp-Verzeichnis in der Befehlszeile pip install -e. um das Paket zu installieren 

In meinem Fall war es Windows vs Python Überraschung, obwohl Windows-Dateinamen nicht zwischen Groß- und Kleinschreibung unterscheiden, Python-Import ist. Wenn Sie eine Stuff.py-Datei haben, müssen Sie diesen Namen so importieren, wie er ist.

0
astrowalker

pip install unter Windows 10 wird standardmäßig unter 'Programme/PythonXX/Lib/site-packages' installiert. Hierbei handelt es sich um ein Verzeichnis, das Administratorrechte erfordert. Also habe ich mein Problem behoben, indem running pip install als Administrator ausgeführt wurde (Sie müssen den Befehl Eingabeaufforderung als Administrator öffnen, auch wenn Sie mit einem Administratorkonto angemeldet sind). Es ist auch sicherer, Pip von Python aus aufzurufen.
z.B.
python -m pip install <package-name>
anstatt
pip install <package-name>

0
sziraqui