一. 想要实现的效果

  1. 新建文件夹将自编模块集中管理

  2. 可在其它py文件内import 自编模块,像import第三方库一样

二. 实现的方法

步骤1:将编号的模块 *.py放入文件夹,在我计算机中是:F:\OneDrive\PythonPrj\_myFunction

步骤2:新建用户/系统环境变量。

变量名:PYTHONPATH

变量值:文件夹路径

然后就可以实现想要的效果了,以下三种import方式均可。

这样做的原理是,Python解释器会去以下三个位置找import的模块:

  1. 当前文件所在目录
  2. 环境变量PYTHONPATH指定的目录
  3. Python 默认的安装目录

Python中sys.path变量记录了解释器可Import模块的位置,如下图所示:

所以,可通过操作sys.path变量告诉解释器去哪里找模块,代码如下:

sys.path是个列表,这里用append将一个路径加到了列表中,然后此路径下的模块a就能成功导入了。这种方法多写了两行代码,不方便,所以只适合临时用一下。

三. 进阶用法

如果自编的模块多了,或者想给自编模块加上说明文档的话,还是希望将每个自编模块单独存放在一个文件夹,以便于管理维护。像这样:

然后在文件夹(如myPackage1)内存放自编模块。

这时想导入模块就要按照以下写法:

这是一级子文件夹的写法,更多级文件夹可以一直点(.)下去。当然,一般也就会用到一级子文件夹,二级几乎都不会使用。

四. 使用_init_.py控制导入某文件夹时执行的操作

上述的导入方式一次只能导入一个文件夹里的一个模块,如果想控制一次导入文件夹中的所有模块,而不用一个个用点号去点,我们需要用到_init_.py文件。

此文件需要与模块在同一目录中,如下图所示,Python中将拥有_init_.py文件的文件夹称为包。

每次import myPackage1时,_init.py会自动执行一次,所以也称为包初始化文件。利用这个特性,我们可以在此文件中写一些代码,用来控制导入文件夹myPackage1时的行为。像这样写这个初始化文件:

import sys
# 将__init__.py文件所在目录加入Python搜索目录中,否则会提示找不到myModule1
sys.path.append(__file__[:-12])

import myModule1

  • 1
  • 2
  • 3
  • 4
  • 5

然后,在其它py文件中导入myPackage1,因为_init_.py文件自动执行,myModule1文件会自动被导入。验证一下:

当然,即使在包初始化文件里写了import 某模块,还是可以用 import myPackage1.myModule 这样的方式来导入。包初始化文件不会对原本的导入方式有任何影响。

另一种写法,可以一次导入包中某模块中定义的函数和属性,像这样写_init_.py文件:

import sys
# 将__init__.py文件所在目录加入Python搜索目录中,否则会提示找不到myModule1
sys.path.append(__file__[:-12])

from myModule1 import *

  • 1
  • 2
  • 3
  • 4
  • 5

然后,在其它py文件导入时这么写:

可见,可以直接使用myModule1中的定义的函数了。

总结一下,导入模块的写法与_init_.py的写法需要保持一致,即要么都import 包名,要么都from 包名 import *,这样才可达到想要的效果。

我对Python理解还不够深入,仅将摸索出来的一些规律分享出来,希望有所帮助。如有错漏,欢迎评论指出。

Python如何导入自己编写的py文件(.pyx文件 .pyd文件)相关推荐

  1. Python如何导入自己编写的py文件

    一. 想要实现的效果 新建文件夹将自编模块集中管理 可在其它py文件内import 自编模块,像import第三方库一样 二. 实现的方法 步骤1:将编号的模块 *.py放入文件夹,在我计算机中是:F ...

  2. 将pyx文件编译成pyd文件(很多坑,已解决)

    项目场景: Faster R-CNN项目,将pyx文件编译成pyd文件(很多坑,请注意) 项目环境 python 3.6 – conda的虚拟环境 TensorFlow 1.15.0 win 10 问 ...

  3. python中 .py .pyc .pyw .pyo .pyd文件

    转:https://blog.csdn.net/willhuo/article/details/49886663 DLL文件即动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和 ...

  4. python import文件pyd_Python生成pyd文件

    Python的脚本文件是开源的,量化策略的安全性没有保障.因此需要保护源码.那么要对Python代码进行混淆.加密保护. 混淆代码,我准备使用pyminifier.而加密处理,就比较麻烦. Pytho ...

  5. Python 怎样导入自己另外的py文件?

    1.基本格式: from 文件名 import 类名 2.举个栗子: 文件PqxMplCanvas.py定义了名为PqxMplCanvas的类. 在另外一个文件中引用过来: from PqxMplCa ...

  6. 用python写一个拼音编辑器(.py版|我会把这个文件的exe版发到评论区的|随时更新|最旧1.0.1|1.0.1)

    我就写个目录吧! 目录 第一步:定义.赋值.导入 第二步:创建窗口 第三步:设置文本输入口 第四步:定义按钮反应 第五步:做按钮.输出区 第六步:窗口循环展示 最终代码(源代码):在打包成exe的时候 ...

  7. python py生成及调用pyd(so)文件

    本文仅供学习交流使用,如侵立删!demo下载见文末 py文件生成pyd文件 1.安装 cython:注意不是cpython pip install cpython 2.py文件生成pyd文件 from ...

  8. python模块文件的扩展名不一定是py_Python文件扩展名.py?.pyc?.pyd?

    与Python相关的文件扩展名实际不止.py..pyc..pyd这三种,但这三种是最常见的,比如以Houdini 16.5.268的Python模块包路径搜索一下有哪些扩展名 与Python相关的只有 ...

  9. Python文件格式 .py .pyc .pyw .pyo .pyd的主要区别

    Python是一种面向对象.解释型计算机程序设计语言.Python 语法简洁.清晰,具有丰富和强大的类库. Python源代码遵循 GPL (GNU General Public License) 协 ...

最新文章

  1. Eclipse里的文件搜索
  2. java NIO概述
  3. python库文档的错误_自己编程中遇到的Python错误和解决方法汇总整理
  4. Matlab-OpenCV-VC-混合编程配置
  5. Java的堆与栈,科普给大家
  6. ANSI C typedef
  7. 微信公众开放平台开发07---java servlet 实现微信开发第一步:微信服务器验证
  8. 深度神经网络反向传播算法
  9. 【数据预测】基于matlab鸟群算法优化BP神经网络数据预测【含Matlab源码 1772期】
  10. 【ESRI论坛6周年征文】ArcEngine注记(Anno/ Label/Element等)处理专题 -入门篇
  11. html如何创建二级标题,这样二级标题就产生了; 步骤四:同理三级标题就在二级标题下创建...
  12. Vue知识点囊括清单
  13. 宏转录组方法_土壤宏转录组RNA的提取方法评价
  14. bmob php,Bmob 简单API使用(一)
  15. 深入理解空洞卷积:优点以及存在问题
  16. 面试官100%会问的接口测试的知识
  17. GDR-Net: Geometry-Guided Direct Regression Network for Monocular 6D Object Pose Estimati
  18. 对特征值和特征向量的理解
  19. 回味一下——仿2008QQ面板导航
  20. 我的世界服务器物品使用权限,MineCraft常用权限大全 - 技巧教程 - 最MC论坛 - 我的世界_Minecraft_联机_服主_资讯_MOD_皮肤_交流_作品_中文论坛...

热门文章

  1. Spring高手之路——深入理解与实现IOC依赖查找与依赖注入
  2. SparkCore核心机制详解
  3. python技能书测评
  4. 第7章:OFDM 信道估计与均衡(4)
  5. Verilog中repeat的用法
  6. 最新的全球78707个主要城市数据库,包含经纬度坐标值国家省份
  7. FutureTask源码解析(2)——深入理解FutureTask 1
  8. linux crash分析案例之进程同步
  9. C/S 和 B/S 模式的区别与联系
  10. 精读-软件测试的艺术之调试,极限测试和因特尔应用系统的测试