python 打包exe文件

前言

python 代码由于是脚本语言,如果是需要保密的算法,最好是使用Cython将python代码编译成C语言,再使用C编译器编译,编译后难以逆向。 在Windows平台上首先使用微软的MSVC编译。考虑微软的MSVC环境体积较大,可以选择使用gcc或者clang进行编译。

使用MSVC 编译器

  1. 安装MSVC 下载vs_BuildTools.exe,然后安装,选择第一个“使用C++的桌面开发”,安装详情保持默认的勾选项,大约需要6GB左右的空间。
  2. 配置环境变量
在path中添加以下路径
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\<版本号>\bin\Hostx64\x64
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\<版本号>\include
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\<版本号>\lib\x64
继续阅读“python 打包exe文件”

python 自动化pdf数字证书签名

背景

之前介绍过小微企业电子合同防篡改实现,手动操作有些繁琐,能否做成自动化脚本?

功能

  1. pdf 导出jpg
  2. jpg 转pdf
  3. 所有者权限控制
  4. 数字签名

实现

上面4个功能,每个功能的实现可以有多种工具,但是能够全部实现的却没找到。只能结合多个工具来实现。

java 实现

java 平台只能实现 1 2 3/4 功能,3和4只能选择一个

继续阅读“python 自动化pdf数字证书签名”

torch 张量

张量是一种特殊的数据结构,与数组和矩阵非常相似。在 PyTorch 中,我们使用张量来编码模型的输入和输出,以及模型的参数。

张量类似于 NumPy 的 ndarray,不同之处在于张量可以在 GPU 或其他硬件加速器上运行。实际上,张量和 NumPy 数组通常可以共享底层内存,从而无需复制数据(详见与 NumPy 的桥接)。张量还针对自动微分进行了优化(我们将在后面的 Autograd 部分详细介绍)。如果您熟悉 ndarrays,您会很快适应 Tensor API。如果不熟悉,请继续阅读!

import torch
import numpy as np

初始化张量

张量可以通过多种方式进行初始化。请看以下示例

直接从数据创建

张量可以直接从数据创建。数据类型会自动推断。

data = [[1, 2],[3, 4]]
x_data = torch.tensor(data)

从 NumPy 数组创建

张量可以从 NumPy 数组创建(反之亦然 – 详见与 NumPy 的桥接)。

np_array = np.array(data)
x_np = torch.from_numpy(np_array)

继续阅读“torch 张量”

Python中r’ ‘, b’ ‘, u’ ‘, f’ ‘的含义及用法详解

在Python中,字符串是一种常见的数据类型,用于表示文本信息。除了普通的字符串,Python还提供了一些特殊的字符串前缀和格式化字符串,包括r’ ‘,b’ ‘,u’ ‘,f’ ‘。本文将详细解释这些前缀的含义以及它们的用法,以帮助大家更好地理解和应用它们。

更多Python学习内容:http://ipengtao.com

r’ ‘: 原始字符串

r前缀表示原始字符串(raw string),它会取消字符串中的转义字符(如\n、\t)的特殊含义。原始字符串适用于需要保留转义字符原始形式的情况,如正则表达式、文件路径等。

1 基本用法

# 使用r前缀创建原始字符串
path = r’C:\Users\Username\Documents’
print(path)

在上述示例中,r前缀将字符串中的反斜杠\视为普通字符,而不是转义字符。

2 与转义字符的比较

# 普通字符串与原始字符串的比较
normal_str = ‘C:\\Users\\Username\\Documents’
raw_str = r’C:\Users\Username\Documents’

print(normal_str == raw_str)  # 输出 True

原始字符串与普通字符串在表示相同的文本时是相等的,但原始字符串更容易阅读和维护。

b’ ‘: 字节字符串

b前缀表示字节字符串(bytes string),它用于处理二进制数据,而不是文本数据。字节字符串是不可变的,通常用于处理图像、音频、网络协议等二进制数据。

1 基本用法

# 使用b前缀创建字节字符串
binary_data = b’\x48\x65\x6c\x6c\x6f’  # 字母 ‘Hello’ 的字节表示
print(binary_data)

在上述示例中,b前缀表示字节字符串,每个\x后面跟着两个十六进制数字,表示一个字节。

2 字符串与字节字符串的区别

# 字符串与字节字符串的区别
text = ‘Hello’
binary_data = b’Hello’

print(type(text))  # 输出 <class ‘str’>
print(type(binary_data))  # 输出 <class ‘bytes’>

字符串和字节字符串是不同的数据类型,字符串用于文本,字节字符串用于二进制数据。

u’ ‘: Unicode字符串

u前缀表示Unicode字符串,它用于处理Unicode编码的文本数据。在Python 3中,所有的字符串都是Unicode字符串,因此很少需要使用u前缀。在Python 2中,u前缀用于表示Unicode字符串。

1 基本用法

# 使用u前缀创建Unicode字符串(Python 2示例)
unicode_text = u’你好,世界!’
print(unicode_text)

在Python 3中,无需使用u前缀,普通字符串即为Unicode字符串。

2 Unicode字符串与普通字符串的区别

# Unicode字符串与普通字符串的区别(Python 2示例)
text = ‘Hello’
unicode_text = u’Hello’

print(type(text))  # 输出 <type ‘str’>
print(type(unicode_text))  # 输出 <type ‘unicode’>

在Python 2中,Unicode字符串与普通字符串是不同的数据类型,用于区分文本编码。

f’ ‘: 格式化字符串

f前缀表示格式化字符串(formatted string),它用于在字符串中嵌入表达式的值。在格式化字符串中,可以使用大括号{}来引用变量或表达式,并将其值插入字符串中。

1 基本用法

# 使用f前缀创建格式化字符串
name = ‘Alice’
age = 30
greeting = f’Hello, my name is {name} and I am {age} years old.’
print(greeting)

在上述示例中,f前缀表示格式化字符串,大括号{}内的表达式会被计算并插入到字符串中。

2 表达式和变量

# 在格式化字符串中使用表达式和变量
x = 10
y = 20
result = f’The sum of {x} and {y} is {x + y}’
print(result)

格式化字符串允许嵌入表达式和变量,并将它们的值动态插入到字符串中。

总结

在Python中,r’ ‘,b’ ‘,u’ ‘,f’ ‘等前缀和格式化字符串是用于处理不同类型文本和数据的工具。r前缀表示原始字符串,b前缀表示字节字符串,u前缀表示Unicode字符串,f前缀表示格式化字符串。了解这些前缀的含义和用法有助于更好地处理不同类型的字符串和数据。

python from .xxx import yyy 与 from xxx import yyy区别

相对导入只能用于同一个package里,并且包内的文件不能单独运行,只能在包的外部来调用



|--testmodule.py
|
|--testpy
   |
   |-- __init__.py 模块标志文件
   |
   |-- hello.py    模块1
   |
   |-- test.py             模块2,导入模块1,不可以单独运行
   |
   |-- test2.py    可以单独运行




hello.py
print('hello.py')
class hhh():
    print('hhhh')



test.py
from .hello import hhh
print('test.py')



testmodule.py
from testpy import test
print('OK')


python3 testmodule.py
hello.py
hhhh
test.py
OK




test2.py
from hello import hhh
print('test2.py')


cd testpy 

ls
__init__.py	__pycache__	hello.py	test.py		test2.py

python3 test.py  不可以单独运行

Traceback (most recent call last):
  File "/Users/yourname/Documents/testpy/test.py", line 1, in <module>
    from .hello import hhh
ImportError: attempted relative import with no known parent package

python3 test2.py  可以单独运行
hello.py
hhhh
test2.py

python3连接oracle数据库

声明:pythoncx_Oracleinstantclient的版本应一致

我这里使用的版本是python3.6 64 ,cx_Oracle-5.3-11g.win-amd64-py3.6-2instantclient-basic-windows.x64-18.5.0.0.0dbru

1. 首先安装cx_Oracle

尽量不要直接使用pip install cx_Oracle,这样默认安装的是最新版本的cx_Oracle,可能会出现以下错误

1.1 cx_Oracle 报错:cx_Oracle.DatabaseError: DPI-1050: Oracle Client library must be at version 11.2

解决方法:从 https://pypi.python.org/pypi/cx_Oracle/5.3 下载低版本cx_Oracle版本 可以下载cx_Oracle-5.3-11g.win-amd64-py3.6-2.exe ,然后直接安装

1.2 如果在安装cx_Oracle-5.3-11g.win-amd64-py3.6-2.exe 时提示Python version 3.6 required, which was not found in the registry

可以通过执行这个文件来解决

register.py   链接: https://pan.baidu.com/s/1GcPK_I7ddSLZkM2sv7AHtA    提取码: qrwm 

2. 下载instantclient-basic-windows.x64-11.2.0.4.0.zip,解压并配置环境变量(放到path中)

下载地址:https://www.oracle.com/technetwork/cn/topics/winx64soft-101515-zhs.html

下载好后解压,并配置环境变量

3. instantclient下所有.dll文件到python\Lib\site-packages\下(我这里的路径为C:\Develop\Anaconda3\Lib\site-packages

4. 测试代码如下

import cx_Oracle conn=cx_Oracle.connect('username','password','172.16.5.29:1521/ORCL') cursor=conn.cursor()   print("连接成功!")   cursor.close() conn.commit() conn.close()

当你看到“连接成功”的提示语句时,那么就恭喜你成功了用python连上了oracle数据库