本问题已经有最佳答案,请猛点这里访问。

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

1

2model -> py_file.py

report -> other_py_file.py

主__init__.py:

1

2import model

import report

模型目录:

1import py_file

报告目录:

1import other_py_file

现在在other_py_file中,我想导入py_file,但我尝试过的任何一次都会出错,因为没有这样的模块。

我试过这个:from model import py_file

然后:import py_file

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

不能在文件夹结构中向后导入,您的结构是从根目录使用的,执行import report,这将导入other_py_file。做import ../model是行不通的。

@Torxed找到了使用您提供的链接的方法。我需要使用import-from-app文件夹名,比如:from my_app.model import py_file。我也尝试过类似的东西,比如from addons.my_app.model import py_file。当这不起作用时,我认为我需要做些别的事情,跳过了从app目录导入的部分。

请检查下面的解决方案。我认为它更适合你的编程模式。

@Torrex我认为更好的解决方案是使用特定的路径,就像在链接中提供的答案之一一样,因为我现在不需要以我需要的方式导入许多文件。

我的答案使用特定的(绝对的)路径,可以与os.walk()结合使用,例如,如果你想动态地导入东西,或者只是创建一个def superimport(name, path):并为你想要导入的每个模块调用它。只是一个想法。

"标记为重复"("如何在python中进行相对导入?")这不是这个问题的副本,因为另一个假设相对进口与"任何"目录(例如,/tmp或~/temp)。因此,请参见stackoverflow.com/questions/67631/…

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

1

2

3

4import sys

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

import py_file

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

是的,这是一种简单的方法,例如,从与另一个库具有相同文件名的文件夹导入时可能会导致问题。不管怎么说,在手术中是这样的,所以我想这不会伤害到…

@torxed我在开始时故意插入路径,以便首先搜索自定义路径以处理名称冲突,这样就不会有问题。

Python 3:

1

2

3

4

5

6import importlib.machinery

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

handle = loader.load_module('report')

handle.mainFunction(parameter)

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

感谢塞巴斯蒂安为Python2提供了类似的答案:

1

2

3

4import imp

foo = imp.load_source('module.name', '/path/to/file.py')

foo.MyClass()

这不是太复杂了吗?

@Alexthornton不是这样的,因为用户想从项目范围中导入python文件,我个人认为最好使用绝对路径来导入,而不是附加到全局导入范围中。我的也更能容忍错误,我认为这是一件好事:)

@Alexthornton显然不是完全的白痴证明,但是理论上你可以导入/home/time.py,而不需要替换捆绑的time库。假设操作没有预先准备好cx1(2),这将确保您导入正确的库,无论您如何操作,您提供的路径都将有效地导入模块。您还可以自定义名称空间,如果使用传统的import ...,则无法自定义名称空间。更重要的是,这将变成一场火焰大战,在这场战争中,哪种解决方案是最好的,哪种是我不打算推广的,这是一个品味问题,就是这样的:)

@亚历克桑顿澄清说,你的解决方案不错,而且确实有效。同样,这是一种品味,你喜欢哪种风格,而不是另一种,因为最终的结果是一样的。

我需要单独导入每个文件吗?如何从一个目录导入多个文件?

我明白了:如果我指定__init__.py,整个包将被导入。

python导入py文件-关于python:如何从另一个目录导入.py文件?相关推荐

  1. 文件高阶操作复制查找处理目录树打包文件shutil

    文件高阶操作复制查找处理目录树打包文件shutil 1.概述 shutil模块包含了文件高级操作,比如复制文件.查找文件.处理目录树.打包文件. 2.复制文件 2.1.文件对文件复制copyfile ...

  2. 用递归求最大值PHP,php如何使用递归来计算一个目录中所有文件的大小(代码)...

    本篇文章给大家带来的内容是关于php如何使用递归来计算一个目录中所有文件的大小 (代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.sudo find /private/etc - ...

  3. python 文件处理1:将某一目录下的文件合并

    导入库函数 import os 函数1:在指定目录下查找指定后缀名的文件,不查找子目录,返回文件路径名列表. 默认在当前目录下查找,不指定后缀名. def get_filelist(base_dir= ...

  4. 如何在两个目录中删除其中一个目录中同名文件

    2019独角兽企业重金招聘Python工程师标准>>> 假设现在有一个目录/mnt/data,还有另外一个目录/opt/data,需要删除/opt/data目录中和/mnt/data ...

  5. JAVA file列出所有文件_用Java代码列出一个目录下所有的文件

    1.File类 File类在java.io.File包中,所以要导入这个包. File类中用到的方法: boolean isDirectory()       测试此抽象路径名表示的文件是否是个目录 ...

  6. 安卓读取mysql数据库文件路径_Android开发实现读取assets目录下db文件的方法示例...

    本文实例讲述了Android开发实现读取assets目录下db文件的方法.分享给大家供大家参考,具体如下: 最近准备打算写一个关于天气预报的app,偶然的机会在一大神的博客上看到了一个获取天气的api ...

  7. win32 API 遍历一个目录下的文件

    代码: #include <windows.h>DWORD EnumerateFileInDirectory(LPWSTR );int APIENTRY WinMain(HINSTANCE ...

  8. 列出一个目录中所有文件及大小

    package com.test.tree;import java.io.File;/*** 列出一个目录中所有的文件和他们的大小* @author wyl**/ public class FileL ...

  9. wget下载一个目录下的文件

    需要下载某个目录下面的所有文件.命令如下: wget -c -r -np -k -L -p www.xxx.org/pub/path/ 下载目录中 能够使用通配符匹配的文件.命令如下: wget -c ...

最新文章

  1. 单元测试:基于Groovy的Spock框架
  2. opencv cv::mat::data是什么数据类型?
  3. 地理素养的核心构成和主要特点
  4. 第二十八期:阿里云VS腾讯云 谁才是中国未来的云计算之王?
  5. 小米11新旗舰通过3C认证:支持最高67.1W快充
  6. Python+Matplotlib绘制带误差线的柱状图
  7. mysql begin rollback_事务控制语句,begin,rollback,savepoint,隐式提交的SQL语句
  8. C++基础new和delete运算符,new和delete简介
  9. npoi 未将对象引用设置到对象的实例_new一个对象到底占了多少内存?
  10. mysql5.7.22的配置说明_mysql 5.7.22 免安裝版Windows配置
  11. PHP导出数据库数据字典脚本
  12. 《设计心理学》读书笔记
  13. 智能卡APDU的命令及其解析
  14. VUE实现市、区二级联动
  15. 海康威视摄像头安装与配置
  16. excel不显示0_Excel教程:数值为0不显示的三种解决方法
  17. JS将秒数换算成具体的天时分秒
  18. EAS BOS:BOS工具导入解决方案失败常见问题分析
  19. 中国故事 张亚勤 访谈
  20. 【论文阅读】如何给模型加入先验知识

热门文章

  1. 定时任务卡死问题排查
  2. Python学习笔记(二)
  3. Linux:vim环境设置
  4. char[]数组与char *指针的区别
  5. Lombok(1.14.8) - @Synchronized
  6. 开始使用Bootstrap
  7. 区别ie8和ie9的方法
  8. 在python中等号前面与后面分别是什么意思-Python中冒号等于(:=)是什么意思?...
  9. 不懂编程可以自学python吗-为什么我建议你一定要学Python?
  10. python各个解释器的用途-11 个优秀的 Python 编译器和解释器