如何从 Python egg 中的子模块导入函数?
How to import functions from a submodule in a Python egg?
我有一个我写的自定义 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 *
None 的那些工作。这是我的 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)
我很惊讶没有人回答这个问题。在搜索 Google、从不同的来源提取并尝试不同的东西后,我能够让它工作。
有一件事让我停滞不前……我试图在 Databricks 集群上安装我的自定义 egg。而且我没有意识到一旦你删除了一个库(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 需要重启集群。
新根初始化 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']
我有一个我写的自定义 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 *
None 的那些工作。这是我的 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)
我很惊讶没有人回答这个问题。在搜索 Google、从不同的来源提取并尝试不同的东西后,我能够让它工作。
有一件事让我停滞不前……我试图在 Databricks 集群上安装我的自定义 egg。而且我没有意识到一旦你删除了一个库(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 需要重启集群。
新根初始化 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']