从多个并行子目录导入模块 (Python)

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 中并且根可能会改变。我正在考虑使用循环来扫描?我只是不熟悉使这成为可能的语法。欢迎所有解决方案!

Dan*_*rin 6

我有以下文件设置:

\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\n
Run Code Online (Sandbox Code Playgroud)\n\n

代码:

\n\n

A/C/E/m1.py

\n\n
def my_func1():\n    print \'func1\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

A/C/F/m2.py

\n\n
def my_func2():\n    print \'func2\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

A/B/myscript.py

\n\n
from C.E.m1 import my_func1\nfrom C.F.m2 import my_func2\n\nmy_func1()\nmy_func2()\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者,如果您的导入目录名称包含空格(例如,C dir而不是C):

\n\n
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()\n
Run Code Online (Sandbox Code Playgroud)\n\n

所有__init__.py文件都是空的,但需要存在,以便 Python 知道在这些文件夹中查找代码。

\n\n

cd到该A目录,然后将脚本作为包运行。注意:文件名没有.py和 结尾。

\n\n
$ python -m B.myscript\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
func1\nfunc2\n
Run Code Online (Sandbox Code Playgroud)\n