这一篇博客的内容主要是记录在python3开发过程中遇到的一些环境依赖、版本选择等问题及对应的解决方案。
1、cx_Oracle的安装与使用
在python中,通过cx_Oracle
模块,我们可以与Oracle数据库进行交互。值得注意的是,cx_Oracle
是通过加载Oracle客户端库文件以实现和Oracle数据库的通信(The cx_Oracle module loads Oracle Client libraries which communicate over Oracle Net to an existing database),而Oracle客户端库文件是需要额外单独安装的。
在cx_Oracle
的官方手册中,详细讲解了如何对cx_Oracle
进行初始化。当操作系统为64位win7时,通过Oracle客户端库文件下载页面选择版本时需要注意,在19.11.0.0.0版本下,无论是Basic Package还是Basic Light Package,均是不支持win7的:
可以选择18.5.0.0.0版本的进行下载,如果只是为了满足cx_Oracle
使用,下载Basic Light Package即可。
如何让下载的库文件生效呢?可以参考这个答案,即将解压后的文件中根目录下的所有.dll
文件复制到python解释器所在路径;也可以看参考cx_Oracle
给出的方法。
2、利用conda进行虚拟环境管理及linux文件的权限问题
利用conda
可以便捷地管理python环境,避免第三方依赖的冲突。
项目实际运行的服务器如果无法联网,那么可以考虑利用conda
在一个具有相同操作系统的、可联网的虚拟机中搭建好python虚拟环境,在该虚拟环境中安装好所有的依赖,然后,找到conda
存放虚拟环境的地方(默认情况下,位于/root/anaconda3/envs
),将刚刚创建的虚拟环境对应的文件夹压缩后上传至目标服务器的虚拟环境路径下,即可实现在目标服务器上使用该虚拟环境。
有时,服务器上的虚拟环境激活后,仍然无法获取正确的python版本,这时候一方面检查anaconda是否已经进行了初始化(执行source ~/.bashrc
进行初始化);另一方面,可以检查目标环境文件夹的权限,给文件夹以合适的权限后,重新激活虚拟环境进行尝试。
关于linux文件权限的问题,可以参考这篇文章。
3、生成/校验MD5码
通过校验MD5码,可以判断一个文件在传输的过程中是否有损坏,利用python可以非常简单的做到这一点:
import hashlib
def md5(fname):
hash_md5 = hashlib.md5()
with open(fname, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
return hash_md5.hexdigest()
上述代码来自于这篇回答,在使用时,只需要传入待校验文件的路径,然后函数会给出该文件的MD5码,通过与原始的MD5码进行对比可以发现文件是否有变化。