如何从其他目录导入.py文件?

And*_*ius 30 python python-import openerp

我有这种文件结构(目录和箭头文件后):

model -> py_file.py 
report -> other_py_file.py
Run Code Online (Sandbox Code Playgroud)

主要__init__.py:

import model
import report
Run Code Online (Sandbox Code Playgroud)

型号目录:

import py_file
Run Code Online (Sandbox Code Playgroud)

报告目录:

import other_py_file
Run Code Online (Sandbox Code Playgroud)

现在在other_py_file我想要导入py_file,但是我尝试了什么,我给出错误,没有这样的模块.

我试过这个: from model import py_file

然后: import py_file

看起来这两个文件夹看不到对方.从其他目录导入文件的方法是什么?我是否需要在init .py文件中指定一些额外的导入?

Ale*_*ton 53

您可以在运行时添加到系统路径:

import sys
sys.path.insert(0, 'path/to/your/py_file')

import py_file
Run Code Online (Sandbox Code Playgroud)

这是迄今为止最简单的方法.

  • 是的,这是一种简单的方法,例如,当您从与另一个库具有相同文件名的文件夹导入时,可能会导致问题.不管怎么说OP都是这样的,所以我想它不会伤害...... (2认同)
  • @Torxed 我特意在开头插入了路径,以便首先搜索自定义路径来处理名称冲突,这样就不会有问题。 (2认同)
  • 如果您的 PROD 应用程序有不同的路径怎么办?这可能在您的本地工作,但如何使文件导入在所有计算机上工作而无需设置硬文件路径? (2认同)

Tor*_*xed 19

Python3:

import importlib.machinery

loader = importlib.machinery.SourceFileLoader('report', '/full/path/report/other_py_file.py')
handle = loader.load_module('report')

handle.mainFunction(parameter)
Run Code Online (Sandbox Code Playgroud)

此方法可用于在文件夹结构中导入您想要的任何方式(向后,向前并不重要,我使用绝对路径只是为了确定).

荣誉对塞巴斯蒂安的spplying为Python2了类似的回答:

import importlib
module = importlib.load_module('folder.filename')
module.function()
Run Code Online (Sandbox Code Playgroud)

  • 这不是太复杂了吗? (3认同)
  • @AlexThornton不是真的,因为用户想要从项目范围中导入python文件我个人认为最好使用绝对路径导入内容而不是附加到全局导入范围.我也更容错,我讲的是一件好事:) (2认同)