例如:
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
确实,这看起来很奇怪。但它完成了这项工作。
答案 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