2017-08-28 4 views
0

Ich bin dabei zu lernen, wie eine Python-Bibliothek mit der official guide zu packen. Ich habe mit dem Klonen des minimalen Beispielpakets begonnen, das in der Anleitung here vorgeschlagen wird. Ich habe dann die Datei my_module.py im Ordner sampleproject mit einer einfachen Power-Funktion hinzugefügt. Eine andere Funktion ist ebenfalls in /sampleproject/sampleproject/__init__.py gespeichert. Die resultierende Struktur der Bibliothek ist die folgendeAttributeError beim Python-Bibliothek Packen Python-Bibliothek

enter image description here

Schließlich habe ich pip verwendet, um das Paket erfolgreich im Interpreter zu installieren. Das einzige, was übrig bleibt, ist sicherzustellen, dass ich die Funktionen ausführen kann, die im Unterordner-Beispielprojekt gespeichert sind.

import sampleproject 
sampleproject.main() 

# Output 
"Call your main application code here" 

Das ist großartig. Das Paket kann die Funktion in __init__.py ausführen. Allerdings ist das Paket finden module.py nicht in der Lage:

import sampleproject 
sampleproject.module 

# Output 
AttributeError: module 'sampleproject' has no attribute 'module' 

Ich habe versucht, __init__.py im Hauptordner hinzufügen und die Einstellungen in entry_points in setup.py ohne Erfolg zu ändern. Was soll ich projectproject lassen, um die Funktion in module.py finden zu können?

Antwort

1

Ihre sampleproject.module ist eine Funktion, die Sie ausführen möchten?

In diesem Fall kann wie für die Sample, add(), um sie auszuführen: sampleproject.module()

Andernfalls Sie Ihr Paket wie folgt importieren:

import sampleproject.module 

oder:

from sampleproject import module 

Um klarer zu sein, müssten Sie import module in Ihrem Beispielprojekt __init__.py. Dann, wenn Sie das Paket verwenden möchten, importieren Sie es (einige py Datei auf root):

import sampleproject # is enough as it's going to import everything you stated in __init__.py 

Danach können Sie zu verwenden beginnen, was im Paket ist Ihnen vielleicht module() importiert, wenn Sie eine Funktion haben, Modul in Ihrem Paket genannt.

init.py discussions

+0

Ihre Lösung funktioniert. Allerdings lese ich oft, dass es eine gute Übung wäre, __init__.py leer zu lassen. Wie können Benutzer ihre Module importieren, während __init__.py leer bleibt? Werden die Einstellungen in setup.py geändert? – Elrond

+1

Es ist gute Praxis, auch in Python verständlichen Code zu haben. Wenn Sie '__init __. Py' leer lassen, benötigen Sie mehr Kenntnis der lib für den Benutzer (er muss etwas über das Modul wissen). Es kann gut sein, es leer zu lassen, wenn man eine Sammlung von Standalone-Funktionen erstellt, die nicht miteinander verknüpft sind. Dadurch werden nur die benötigten Dateien importiert (auch wenn es eine andere Möglichkeit gibt, dies aus einer riesigen Datei zu machen): 'lib import fcn1, fcn2 ... '). Wie auch immer, wenn Sie einige Init haben, um (auf Modulebene) wie mehrere Importe durchzuführen, können Sie es in '__init__ tun.py' (schau dir die std-Bibliothek in deinem Python-Installationsordner an). – SMFSW

0

es scheint,

Sie sind in sampleproject-> module.py

so müssen Sie versuchen,

from sampleproject import module 
Verwandte Themen