【问题标题】:Import Python modules from a different folder从不同的文件夹导入 Python 模块
【发布时间】:2018-02-15 17:38:21
【问题描述】:

我有以下目录结构,

/Scripts/myPyFile.py #myPyFile.py 确实从多个其他文件导入(/Scripts/x.py、/Scripts/y.py 等等) 定义 modA() def ModB()

/Script/allScripts/main.py(我希望 main.py 能够从 myPyFile.py 导入 modA)

我用谷歌搜索了这个问题并尝试了几种方法,但由于 myPyFile.py 导入了其他模块,我遇到了错误。

无需将其添加到路径变量的最佳方法是什么?我在 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"

【问题讨论】:

  • 如果完整路径不起作用,为什么相对导入会起作用?请解释一下。
  • 这两行,你能用完整的 TraceBack // 错误更新你的问题

标签: python-3.x windows-7 windows-7-x64


【解决方案1】:

在您的问题中,您详细说明 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:\test\py1\file1.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:\test\py2\file2.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()

运行 file2.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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2013-08-26
    • 1970-01-01
    • 2018-08-08
    • 2019-02-11
    相关资源
    最近更新 更多