2017-06-19 3 views
1

Ich habe ein benutzerdefiniertes Python-Ei, das ich geschrieben habe, das ich das Submodul (oder das verschachtelte Modul) nicht extern laden kann. Ich konnte ein Root-Level-Modul problemlos laden.Wie importiere ich Funktionen von einem Submodul in einem Python-Ei?

Hier ist die verschleierten Struktur:

 
my_egg/ 
    my_egg/ 
     __init__.py (empty file) 
     module_one.py 
     my_subdir\ 
      __init__.py (empty file) 
      module_two.py 
    setup.py 

importieren module_one funktioniert:

from my_egg import module_one 

Aber ich kann nicht zu bekommen module_two zu importieren scheinen. Hier ist, was ich versucht habe:

from my_egg.my_subdir import module_two 
from my_egg import my_subdir.module_two 
from my_egg.my_subdir.module_two import * 

Keiner von denen funktioniert. So sieht mein setup.py aus:

from setuptools import setup 

setup(name='my_egg', 
    version='0.1', 
    packages=['my_egg'], 
    test_suite='nose.collector', 
    tests_require=['nose'], 
    zip_safe=False) 

Antwort

1

Ich bin überrascht, niemand antwortete dies. Ich konnte es nach dem Durchsuchen von Google, dem Ziehen aus verschiedenen Quellen und dem Ausprobieren verschiedener Dinge zum Laufen bringen.

Eine Sache, die mich aufgehalten hat ... Ich habe versucht, mein eigenes Ei auf einem Databricks Cluster zu installieren. Und ich habe nicht bemerkt, dass nach dem Löschen einer Bibliothek (Ei) der Cluster neu gestartet werden muss, damit er gelöscht werden kann. Jedesmal, wenn ich Änderungen versuchte, wurde nichts wirksam. Das hat meinen Fortschritt definitiv verzögert.

In jedem Fall habe ich in meine setup.py Datei geändert, um find_packages zu verwenden und Änderungen an den leeren __init__.py Dateien vorgenommen. Ich bin mir nicht wirklich sicher, ob beide Änderungen notwendig waren oder ob es genügt hätte.

New my_egg/setup.py:

exec(open('my_egg/version.py').read()) 

from setuptools import setup, find_packages 

setup(name='my_egg', 
     version=__version__, 
     packages=find_packages(exclude=('tests', 'docs')), 
     test_suite='nose.collector', 
     tests_require=['nose'], 
     zip_safe=False) 

Ich habe eine my_egg/version.py Datei, mir zu helfen zu debuggen, wenn ich die richtige Version auf dem Cluster verwendet wurde. Dieser Zusatz hat mich tatsächlich dazu gebracht zu entdecken, dass Databricks erfordert, dass der Cluster neu gestartet wird.

New root init my_egg/my_egg/__init__.py Datei:

from .version import __version__ 
from .module_one import module_one_func 
from .my_subdir.module_two import module_two_func 

__all__ = ['module_one_func'] 

Neue Unterverzeichnis init my_egg/my_egg/my_subdir/__init__.py:

from module_two import module_two_func 

__all__ = ['module_two_func'] 
Verwandte Themen