python导出一个目录文件中的两个

时间:2012-05-23 17:58:44

标签: python import

例如:

 Files/ 
    main.py
    SubFileA/
        __init__.py              "from util1 import help"
        util1.py                 "def help(): print ...A..."
    SubFileB/
        __init__.py              "from util1 import help"
        util1.py                 "def help(): print ...B..."
SubFileA和SubFileB中的

和util1.py具有不同的内容。

我想通过某种方式用户可以指定要导入的util1.py。

我期待的是:

  if subFileA:
       from SubFileA import *
  else:
       from SubFileB import *

util1.py具有相同的API,但实现方式不同。

我为什么这样做的原因,因为如果我将两个util1.py组合在一起,代码将变得丑陋且难以维护。希望有人能给我一个解决方案,或者任何建议都会很棒!

我尝试了这些代码,但是我收到了警告(它确实有效,但警告令人尴尬):

main.py:4: SyntaxWarning: import * only allowed at module level
   def main():
main.py:4: SyntaxWarning: import * only allowed at module level
   def main():

大家。我想我找到了解决方案。但我认为这不是好的编程风格。

Files/
   main.py                              "from directory import *"
   directory/
       __init__.py                      
                                        "user=raw_input() 
                                        if user: 
                                              from directoryA import *
                                        else
                                              from directoryB import * "
       directoryA/
           __init__.py                   "from util1 import help1()"
           util1.py 
       directoryB/
           __init__.py                   "from util1 import help1()"
           util1.py 

确实,这看起来很奇怪。但它完成了这项工作。

1 个答案:

答案 0 :(得分:1)

您需要将每个目录放入一个包中,以使from <package> import ...语法起作用。要告诉Python一个目录是一个包,只需在每个目录中创建一个空的__init__.py文件。

如果您需要特定的行为,具体取决于导入的util1版本,您可以在每个__init__.py文件中编写初始化代码。

有关详细信息,请查看official documentation on packages


最终,您的新项目目录树应如下所示:

Files/ 
    main.py
    SubFileA/
        __init__.py
        util1.py
    SubFileB/
        __init__.py
        util1.py