【问题标题】:How to import functions from a submodule in a Python egg?如何从 Python Egg 中的子模块导入函数?
【发布时间】:2017-11-22 03:35:12
【问题描述】:

我编写了一个自定义 Python 鸡蛋,我无法让子模块(或嵌套模块)从外部加载。我已经能够很好地加载根级模块了。

这是混淆后的结构:

我的蛋/ 我的蛋/ __init__.py(空文件) module_one.py 我的子目录\ __init__.py(空文件) 模块二.py 安装程序.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)

【问题讨论】:

    标签: python setuptools egg


    【解决方案1】:

    我很惊讶没有人回答这个问题。在搜索了 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']
    

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 2015-03-05
      • 2016-01-03
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多