【问题标题】:Import issues with custom python package自定义 python 包的导入问题
【发布时间】:2014-03-31 23:46:21
【问题描述】:

我有一个 python 包,像这样被删除:

<main package>
   |-> __init__.py
   <sub package1>
      |-> __init__.py
      |-> admin.py
      |-> <other python files>
   <sub package 2>
      |-> __init__.py
      |-> <other python files>

在主包 init.py 我做了以下:

import subpackage1
import subpackage2
__version__ = "1.2.1a"

当我去使用这个包时,我遇到了导入问题

from mainpackage import subpackage1 # works 
admin = subpackage1.admin  #fails
from mainpackage.subpackage1 import admin # works

我应该能够直接从 subpackage1 调用管理模块吗?我有什么遗漏吗?

谢谢

【问题讨论】:

    标签: python class python-2.7 module package


    【解决方案1】:

    尝试在subpackage1__init__.py 中添加import admin。 之后,以下代码应该可以工作:

    /main/subpackage1/__init__.py
    
    import admin
    
    /main/subpackage1/admin.py
    
    def PrintAdmin():
        print 'Admin'
    
    /some_other_module.py:
    
    from main import subpackage1
    admin = subpackage1.admin 
    #Invoke some function from admin.py
    admin.PrintAdmin() #RESULT: Admin
    

    【讨论】:

    • 所以对于子包 1 中的每个模块,我都必须在子包的 init.py 中进行导入?
    • 你必须这样做。您也可以import main.subpackage1.admin as admin 然后在您的代码中使用admin.PrintAdmin()
    • 我不知道静态导入的更好方法。也想知道
    【解决方案2】:

    除非我完全误解了你的要求,因为 Python 导入的工作方式,如果你这样做的话

    from mainpackage import subpackage1
    

    subpackage1 中的所有项目都可以在不将 mainpackage 放在其前面的情况下被引用,而不是如果你这样做的话

    import mainpackage
    

    【讨论】:

    • 好的,我想我明白你在说什么了。所以我只是误解了导入?
    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多