我有一个我编写的自定义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)
答案 0 :(得分:1)
我很惊讶没有人回答这个问题。在淘到谷歌之后,我从不同的资源中汲取经验,并尝试不同的事情,我能够让它发挥作用。
有一件事让我失望......我试图在Databricks集群上安装我的自定义鸡蛋。我没有意识到,一旦删除了一个库(egg),就必须重新启动集群才能将其删除。因此,每次我尝试更改,都没有生效。这无疑推迟了我的进步。
在任何情况下,我都更改为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需要重新启动集群。
新的root 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']
新的子目录初始my_egg/my_egg/my_subdir/__init__.py
:
from module_two import module_two_func
__all__ = ['module_two_func']