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

2024-04-18 21:30:40 发布

您现在位置:Python中文网/ 问答频道 /正文

对python比较陌生,我在工作中使用它来实现实验室设备的自动化。在

我有一个脚本存在于目录B中。目录B的父目录是目录a。目录a保存着另一个目录,我需要从中输入和导入模块。结构如下:

            A
  B                   C
  myscript.py    
                   E        F
                  m1.py    m2.py

我需要将m1.py和m2.py导入到脚本中。我无法将上面的脚本移动到A目录中,因为它正在访问我编写并转储到B中的其他模块。出于公司特定的原因,我需要维护目录C及其以下的所有内容的目录结构(不要让我开始)

我的问题是,我如何明智地导入这些?我不想硬编码它们的路径,因为它们将存在于SVN中,并且根可能会改变。我在考虑用一个循环来扫描?我只是不熟悉语法来实现这一点。欢迎所有解决方案!在


Tags: 模块py路径目录脚本内容编码公司
3条回答

更好的做法是在Python中显式导入并注意目录结构。如果结构改变了,你的导入也应该改变。在

只要您的项目在python路径上,您就应该能够从B中的模块或层次结构中的任何其他位置执行此操作:

from Project.A.B import myscript
from Project.A.C.E import m1
from Project.A.C.F import m2

如果目录结构总是相同的,您可以尝试导入m1.pym2.py,方法是将C的路径追加到myscript.py中的sys.path。在

您还可以通过使用os.path方法(如^{}和{a2}和{a3})以及变量-__file__B获得{}的路径。在

示例-

import os.path
import sys
curdir = os.path.dirname(__file__)
cdir = os.path.abspath(os.path.join(curdir,'../C'))
sys.path.append(cdir)
import m1,m2

我有以下文件设置:

    A
    ├── B
    │   ├── __init__.py
    │   └── myscript.py
    └── C
        ├── E
        │   ├── __init__.py
        │   └── m1.py
        ├── F
        │   ├── __init__.py
        │   └── m2.py
        └── __init__.py

代码:

A/C/E/m1.py

^{pr2}$

A/C/F/m2.py

def my_func2():
    print 'func2'

A/B公司/myscript.py在

from C.E.m1 import my_func1
from C.F.m2 import my_func2

my_func1()
my_func2()

或者,如果导入目录名有空格(例如,C dir而不是C):

import importlib
m1 = importlib.import_module("C dir.E.m1")
m2 = importlib.import_module("C dir.F.m2")

m1.my_func1()
m2.my_func2()

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

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

$ python -m B.myscript

输出:

func1
func2

相关问题 更多 >