2017-06-19 11 views
1

私は書いた独自のPythonの卵を持っています。サブモジュール(またはネストされたモジュール)を外部からロードすることはできません。私はルートレベルのモジュールをうまく読み込むことができました。Python eggのサブモジュールから関数をインポートするには?

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

module_one作品のインポート:

はここに難読化された構造だ

from my_egg import module_one 

しかし、私はmodule_twoをインポートするように見えることはできません。ここで私が試したことは次のとおりです。

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

誰も働いていません。ここに私のsetup.pyのようなものがあります:

from setuptools import setup 

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

答えて

1

誰もこれに答えませんでした。私は、Googleを精練して、さまざまなソースから引き出し、さまざまなことを試した後に、それを稼働させることができました。

私を抱きしめていたもの...私はカスタム卵をDatabricksクラスタにインストールしようとしていました。そして、ライブラリ(卵)を一旦削除すると、それを削除するためにはクラスタを再起動する必要があることに気付きませんでした。ですから、私が変更を試みるたびに何も効果がありませんでした。これは間違いなく私の進歩を遅らせた。

いずれにしても、setup.pyファイルに変更してfind_packagesを使用し、空の__init__.pyファイルを変更しました。両方の変更が必要なのか、それとも十分に満足すればよいのかは分かりません。

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) 

私は、クラスタ上で右バージョンを使用していたなら、私はデバッグを支援するためにmy_egg/version.pyファイルを追加しました。この追加によって、実際にDatabricksがクラスタを再起動する必要があることがわかりました。

新ルートのinit my_egg/my_egg/__init__.pyファイル:

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

__all__ = ['module_one_func'] 

新しいサブディレクトリのinit my_egg/my_egg/my_subdir/__init__.py

from module_two import module_two_func 

__all__ = ['module_two_func'] 
関連する問題