Python3.6 import源文件与编译文件的关系
小结:
在Python3.6中
- 源文件存在时,import会比较源文件与__pycache__里相应文件的时间戳,来决定是否重新生成缓存编译文件
- 源文件不存在时,import会导入相应的.pyc文件
以下以一个小实验进行比较:
1. 创建 main.py
#!/usr/bin/env python
# -*- coding:utf-8 -*- '''import测试 结论:
在有源文件的条件下,import总是会根据源文件在__pycache__目录下生成最新pyc文件
在没有源文件的情况下,import 才会导入相应目录下的.pyc(python编译文件) '''
import amodule
2. 创建 amodule.py
print(2)
print(__file__)
3. 创建 build.py
# -*- coding: utf-8 -*-
import compileall
import os compileall.compile_dir(os.path.abspath(os.path.dirname(__file__)),legacy=True,force=True)
4. 用build.py编译文件
5. 执行main.py
运行main.py后,会发现当前目录下创建了__pycache__目录,该目录下生成了amodule.cpython-36.pyc
6. 修改 amodule.py
print(3)
print(__file__)
7. 再用build.py编译文件
8. 再执行main.py
运行main.py后,会发现更新了 当前目录\__pycache__\amodule.cpython-36.pyc 文件
10. 删除 amodule.py 文件及 __pycache__ 目录
11. 再执行main.py
此时导入的是amodule.pyc文件
Python3.6 import源文件与编译文件的关系的更多相关文章
- python3.6调用c语言动态编译文件 c语言编译可执行文件和动态编译等
1.c的代码 dfunc.c #include<stdio.h> int dgfunc(int n) { ){ ; }else{ )+dgfunc(n-); } } 2.动态编译 cmd ...
- idea src下源文件和class编译文件不一致
今天遇到一个神奇BUG,一个和elasticsearch没有任何关系的项目,报错ES某个包找不到,刚开始以为是依赖了父项目的某个包,并且本项目主启动类ComponentScan扫描了相关的类进入Spr ...
- Ubuntu下安装Python3.4及用python编译py文件
1.安装python 3.4程序 sudo apt-get install python3.4 2.python 3.4是被默认安装在/usr/local/lib/python3.4,删除默认pyth ...
- 问题处理:找不到Pch预编译文件?
提醒:Xcode6之后就不再自动创建Pch预编译文件 在Xcode6之前,创建一个新工程xcode会在Supporting files文件夹下面自动创建一个“工程名-Prefix.pch”文件,也是一 ...
- iOS开发之Xcode6 之手动添加Pch预编译文件
参考文档 http://blog.csdn.net/crazyzhang1990/article/details/44243343 红色部分为本人自己补充注意事项 在Xcode6之前,创建一个新工程x ...
- Cocos移植到Android-Android.mk编译文件
我们在上一篇博客中年使用的cocos工具对于C和C++源代码进行编译.事实上cocos工具读取<游戏工程目录>\proj.android\jni\目录中的Android.mk文件,进行交叉 ...
- Xcode6之后创建Pch预编译文件
在Xcode6之前,创建一个新工程xcode会在Supporting files文件夹下面自动创建一个“工程名-Prefix.pch”文件,也是一个头文件,pch头文件的内容能被项目中的其他所有源文件 ...
- 把EXE可执行文件等作为资源包含在Delphi编译文件中
摘自我自己过去写的一段心得. 1.编辑资源文件 *.RCWave: 资源文件是声音文件:RCDATA: 二进制数据AVI: AVI动画:ICON: 图标文件:BITMAP: 位图文件:CURSOR: ...
- python3 库pandas写入csv格式文件出现中文乱码问题解决方法
python3 库pandas写入csv格式文件出现中文乱码问题解决方法 解决方案: 问题是使用pandas的DataFrame的to_csv方法实现csv文件输出,但是遇到中文乱码问题,已验证的正确 ...
随机推荐
- Assembly之instruction之Indirect Autoincrement Mode
Assembler Code Content of ROMMOV @R10+,0(R11) MOV @R10+,0(R11) Length: One or two words Operation: ...
- dubbo之泛化引用
使用泛化调用 泛化接口调用方式主要用于客户端没有 API 接口及模型类元的情况,参数及返回值中的所有 POJO 均用 Map 表示,通常用于框架集成,比如:实现一个通用的服务测试框架,可通过 Gene ...
- 浅谈 Unserscore.js 中 _.throttle 和 _.debounce 的差异
来源:http://blog.coding.net/blog/the-difference-between-throttle-and-debounce-in-underscorejs Unsersco ...
- react-draft-wysiwyg富文本
import { EditorState, convertToRaw } from 'draft-js'; import { Editor } from 'react-draft-wysiwyg' ...
- python中*的用法
在python中,很多情况下会用到*,下面举一些例子来说明*的用法 1.数字计算中,*代表乘法,**代表求幂 print('2乘以3值为:%s'%(2*3)) print('2的3次方值为:%s'%( ...
- Leetcode刷题笔记——查找
33.Search in Rotated Sorted Array 题目描述: 给定一个被翻转的整型升序数组nums,数组中无重复元素,如[4,5,6,7,0,1,2],和一个整数target.要求在 ...
- Linux思维导图之文件压缩
- ubuntu 16.04 忘记登录密码的解决办法
1.开机点击ESC或长按Shift,进入GUN GRUB界面 2.选择有recovery mode的选项,按e进入命令行 3.找到有recovery nomodeset的行,删除recovery ...
- java链接linux服务器,命令操作
1.本地读取linux文件,即在Windows上链接外部linux package com.common.utils; import java.io.BufferedReader; import ja ...
- vue_music:排行榜rank中top-list.vue中样式的实现:class
排行榜的歌曲列表,根据排名渲染不同的样式,同时需要考虑分辨率的2x 3x图 不同的样式--:class 考虑分辨率的2x 3x图--需要在stylu中的mixin中bgImage根据屏幕分辨率选择图片 ...