例如:
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
确实,这看起来很奇怪。但它完成了工作。
最佳答案
您需要将每个目录打包为 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
关于python从两个目录文件中导入一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10725356/