代码之家  ›  专栏  ›  技术社区  ›  usustarr

从其他文件夹导入Python模块

  •  1
  • usustarr  · 技术社区  · 7 年前

    我有以下目录结构,

    /脚本/myPyFile。py#myPyFile。py不从多个其他文件导入(/Scripts/x.py,/Scripts/y.py等等) def modA() def ModB()

    /脚本/所有脚本/主脚本。py(我希望main.py能够从myPyFile.py导入modA)

    我在google上搜索了这个问题,并尝试了几种方法,但由于myPyFile的存在,我出现了一些错误。py导入其他模块。

    不必将其添加到path变量的最佳方法是什么?我使用的是Win7 Python 3.4

    我已经尝试了链接解决方案,但它对我不起作用。

    sys.path.insert(0, r'C:\Users\Configuration\Script')
    from myPyFile import getGatewayDevId   #This gives so many errors about myPyFile import. Same issue if I try "import myPyFile"
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Edwin van Mierlo    7 年前

    在你的问题中,你详细说明了 myPyFile.py 在目录中 /Scripts (请注意“脚本”末尾的“s”)

    然后您可以:

    sys.path.insert(0, r'C:\Users\Configuration\Script')
    

    目录名上似乎缺少尾随的“s”。


    我就是这样做的:

    磁盘上的结构:

    C:\
     |
     test\
        |
        py1\
        | |
        | __init__.py 
        | file1.py
        |
        py2\
          |
          __init__.py
          file2.py
    

    二者都 __init__.py 文件为空

    C: \测试\ py1 \文件1。py公司

    # file1.py
    
    def my_function1():
        print('{}.my_function1()'.format(__file__))
    
    def my_function2():
        print('{}.my_function2()'.format(__file__))
    
    
    def main():
        my_function1()
        my_function2()
    
    if __name__ == '__main__':
        main()
    

    现在我们正在将file1导入file2

    C: \测试\ py2 \文件2。py公司

    # file2.py
    
    import sys
    from pathlib import Path 
    
    filepath = Path(__file__).resolve()
    root_folder = filepath.parents[1]
    sys.path.append(str(root_folder))
    
    from py1 import file1 
    
    file1.my_function1()
    file1.my_function2()
    

    正在运行文件2。py提供以下正确输出:

    C:\test\py1\file1.py.my_function1()
    C:\test\py1\file1.py.my_function2()
    

    如果您想了解所有家长(文件夹),可以随时快速检查:

    from pathlib import Path 
    
    filepath = Path(__file__).resolve()
    for i in range(len(filepath.parents)):
        print(i, filepath.parents[i])