jon*_*d42 0 python structure file python-import
对 python 来说相对较新,我在工作中使用它来实现实验室设备自动化。
我有一个脚本位于目录 B 中。目录 B 的父目录是目录 A。目录 A 包含另一个我需要输入和导入模块的目录。结构如下:
A
B C
myscript.py
E F
m1.py m2.py
Run Code Online (Sandbox Code Playgroud)
我需要将 m1.py 和 m2.py 导入到我的脚本中。我无法将上面的脚本移动到 A 目录中,因为它正在访问我编写并转储到 B 中的一堆其他模块。出于公司特定原因,我需要维护目录 C 及其下的所有内容的目录结构(不要获取我开始了。)
我的问题是,如何智能地导入这些?我不想对它们的路径进行硬编码,因为它们将存在于 SVN 中并且根可能会改变。我正在考虑使用循环来扫描?我只是不熟悉使这成为可能的语法。欢迎所有解决方案!
我有以下文件设置:
\n\n A\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 B\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 myscript.py\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 C\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 E\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 m1.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 F\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 m2.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\nRun Code Online (Sandbox Code Playgroud)\n\n代码:
\n\nA/C/E/m1.py
\n\ndef my_func1():\n print \'func1\'\nRun Code Online (Sandbox Code Playgroud)\n\nA/C/F/m2.py
\n\ndef my_func2():\n print \'func2\'\nRun Code Online (Sandbox Code Playgroud)\n\nA/B/myscript.py
\n\nfrom C.E.m1 import my_func1\nfrom C.F.m2 import my_func2\n\nmy_func1()\nmy_func2()\nRun Code Online (Sandbox Code Playgroud)\n\n或者,如果您的导入目录名称包含空格(例如,C dir而不是C):
import importlib\nm1 = importlib.import_module("C dir.E.m1")\nm2 = importlib.import_module("C dir.F.m2")\n\nm1.my_func1()\nm2.my_func2()\nRun Code Online (Sandbox Code Playgroud)\n\n所有__init__.py文件都是空的,但需要存在,以便 Python 知道在这些文件夹中查找代码。
cd到该A目录,然后将脚本作为包运行。注意:文件名没有.py和 结尾。
$ python -m B.myscript\nRun Code Online (Sandbox Code Playgroud)\n\n输出:
\n\nfunc1\nfunc2\nRun Code Online (Sandbox Code Playgroud)\n