Edw*_*ler 2 python egg setuptools
我有一个我编写的自定义 Python 蛋,我无法从外部加载子模块(或嵌套模块)。我已经能够很好地加载一个根级模块。
这是混淆的结构:
我的蛋/
我的蛋/
__init__.py(空文件)
module_one.py
我的子目录\
__init__.py(空文件)
module_two.py
设置文件
导入 module_one 有效:
from my_egg import module_one
Run Code Online (Sandbox Code Playgroud)
但我似乎无法导入 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 *
Run Code Online (Sandbox Code Playgroud)
这些都没有用。这是我的 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)
Run Code Online (Sandbox Code Playgroud)
我很惊讶没有人回答这个问题。在搜索谷歌,从不同的来源中提取并尝试不同的东西后,我能够让它工作。
一件事阻碍了我……我试图在 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)
Run Code Online (Sandbox Code Playgroud)
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']
Run Code Online (Sandbox Code Playgroud)
新的子目录 init my_egg/my_egg/my_subdir/__init__.py:
from module_two import module_two_func
__all__ = ['module_two_func']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3130 次 |
| 最近记录: |