【原创】研究Tribler过程中遇到的Python相关问题总结

简介:


【如何导入包】

两点搞定,就可以import了:

  • package的当前目录下要有__init__.py文件,表示它自己是个package
  • package的parent目录要在PYTHONPATH中

打开文件的路径和导入模块的路径

    打开文件用的“路径”和导入模块的“路径”是不一样的。
    打开文件的路径是你主程序文件(.py)启动时所在的路径,这个当前路径是一个确定的唯一的路径,例如,当使用PythonWin打开D:\p2pEnv\mainbranch\Tribler\Tools\createlivestream.py时:

import os
print os.getcwd()
'D:\\p2pEnv\\mainbranch\\Tribler\\Tools'
# 可以如下切换当前目录
os.chdir(r'C:\Python27\Lib')

       模块搜索的路径是通过sys.path指定的路径,该变量初始化时默认包含了

  • 输入脚本所在目录(即执行文件的当前目录)
  • PYTHONPATH目录
  • Python安装目

       使用sys.path.append(modulepath)添加的路径只在运行时有效,下次运行编译器时就不存在了,这里modulepath可以是包含.py/pyc/pyo/pyw等文件的zipegg。

import sys
print sys.path 
['C:\\', 'C:\\WINDOWS\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27\\Lib\\site-packages\\Pythonwin', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Python27\\lib\\site-packages\\win32', 'C:\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\Python27\\lib\\site-packages\\wx-2.8-msw-unicode']

【__init__.py文件

__init__.py文件:导入包之前都会调用该文件

       只要第一次导入包中的任何部分,就会执行文件__init__.py中的代码。这个文件可以为空,但也可以包含可执行特定于该包的初始化工作的代码。在import语句执行期间,遇到的所有__init__.py文件都会执行。因此,语句import Graphics.Primitive.fill将会首先执行Graphics目录中的__init__.py文件,然后执行Primitive目录中的__init__.py文件。

       在使用包时,处理下面这条语句时需要小心:

?
1
from Graphics.Primitive import *

       使用该语句的程序员通常希望将与某个包相关联的所有子模块导入到当前命名空间中。但是,由于各个子系统之间的文件名约定不同(特别是在区分大小写上),Python无法准确地确定各个模块的具体内容。结果,该语句只会导入在Primitive目录的__init__.py文件中定义的所有名称。这个列表应该在包的__init__.py文件中定义,例如:

?
1
2
# Graphics/Primitive/__init__.py
__all__ = [ "lines" , "text" , "fill" ]

       因此,可以在__init__.py文件中定义__all__,通过该定义,模块(或包)可以精确控制导入的名称集合,比如module.py中

?
1
__all__ = [ "bar" , "SomeClassName" , "SomeProperty" , "SomeFunction" ]

单独导入包名称不会导入包中所包含的子模块,比如

?
1
2
import somepkg
somepkg.somemodule(xx) #失败

但由于import somepkg会执行somepkg目录下的__init__.py文件,所有如果__init__.py中有from . import somemodule之类的语句,则somepkg.somemodule(xx) 就可以正确执行了。

【文件格式

       python并非完全是解释性语言,它是有编译的。python程序执行时通常是先把源码.py文件编译成.pyc或者.pyo,然后由python的虚拟机执行。相对于.py文件,编译得到的.pyc和.pyo从本质上讲和.py没有太大区别,只是会提高当前模块的加载速度,但并没有提高代码的执行速度。通常情况下不用主动去编译.py文件,文档上说只要调用了import model那么model.py就会自动被先编译成model.pyc然后再加载。


.pyc:预编译过的.py文件
.pyo:优化的预编译过的.py文件
.pyw

Windows下.py文件用 python.exe 运行,.pyw文件用 pythonw.exe 运行

跟 python.exe 比较起来,pythonw.exe 有以下的不同:

  • 执行时不会弹出控制台窗口(也叫 DOS 窗口)
  • 所有向原有的 stdout 和 stderr 的输出都无效
  • 所有从原有的 stdin 的读取都只会得到 EOF
.pyw 格式是被设计来运行开发完成的纯图形界面程序的。纯图形界面程序的用户不需要看到控制台窗口。
目录
相关文章
|
9月前
|
机器学习/深度学习 算法 Python
【SSA-LSTM】基于SSA-LSTM预测研究(Python代码实现)
【SSA-LSTM】基于SSA-LSTM预测研究(Python代码实现)
123 0
|
4天前
|
算法 调度 Python
【Python】可再生能源发电与电动汽车的协同调度策略研究
【Python】可再生能源发电与电动汽车的协同调度策略研究
|
12天前
|
数据可视化 Python
Python用 PyMC3 贝叶斯推理案例研究:抛硬币和保险索赔发生结果可视化
Python用 PyMC3 贝叶斯推理案例研究:抛硬币和保险索赔发生结果可视化
|
13天前
|
机器学习/深度学习 数据采集 数据可视化
Python在数据分析领域的应用研究
Python在数据分析领域的应用研究
24 0
|
16天前
|
数据可视化 算法 量子技术
qutip,一个高级的 Python 量子力学研究库!
qutip,一个高级的 Python 量子力学研究库!
25 0
|
24天前
|
算法 决策智能 Python
Python基于粒子群优化的投资组合优化研究
Python基于粒子群优化的投资组合优化研究
|
27天前
|
算法 数据可视化 数据挖掘
Python Monte Carlo K-Means聚类实战研究
Python Monte Carlo K-Means聚类实战研究
|
27天前
|
传感器 数据可视化 BI
python研究汽车传感器数据统计可视化分析
python研究汽车传感器数据统计可视化分析
|
1月前
|
机器学习/深度学习 人工智能 算法
【Python毕业设计】python基于CatBoost模型的混凝土强度预测研究(源码+数据集+毕业论文)【独一无二】
【Python毕业设计】python基于CatBoost模型的混凝土强度预测研究(源码+数据集+毕业论文)【独一无二】
|
8月前
|
机器学习/深度学习 存储 算法
Python 基于 opencv 车牌识别系统的研究与实现
Python 基于 opencv 车牌识别系统的研究与实现