自动Cython,使用Cython批量编译.py文件为.pyd文件!
Project description
AutoCython
自动Cython,使用Cython批量编译.py文件为.pyd文件!
安装
pip install AutoCython-jianjun
使用
这是一个轮子,大多数情况下,你只需要这样就可以很快的把 .py
编译为 .pyd
!
import AutoCython
AutoCython().compile()
命令行
除了把 AutoCython
作为包导入外,AutoCython
也支持直接命令行进行编译:
详细的参数说明 英文 AutoCython -h
或者 中文 AutoCython --ch
查看, 也可以查看下面的详细说明:
AutoCython -C D:/python_code/ProjectPath -E tmp.py;./ProjectPath/print_cy.py;./ProjectPath/data/tmp -M 8 -D bp
- 全自动:自动编译当前目录下所有.py文件,支持指定目录编译或单文件编译;
- 个性化:支持指定排除目录或排除文件跳过编译;
- 高效率:
默认利用全部CPU核心,也可指定使用核心数量;默认启动进程数为cpu核心数四分之一,大多数情况下可以把cpu占满; - 易纠错:快速纠错,在编译失败时能极快的获取错误信息;
前置
Cython : https://github.com/cython/cython
Cython前置
如果你已经正确安装配置好Cython,那么你可以不用看这;
推荐C、C++编译器gcc和VS选一个,其他编译器能否使用未知,具体的安装请查阅Cython的安装教程;
目前测试了64位Python3.6与gcc 64位,与VS2017下都可以通过编译; 需要注意的是,如果你使用的Python是64位的,那么对应的C、C++编译器也必须为64位;
vs安装简便,占用空间大,配置简单;gcc安装简便,占用空间小,配置比较复杂; 不想折腾的话安装vs,想精简一点的话安装gcc。
win下gcc推荐安装MinGW:
具体安装Cython过程请查阅相关资料
使用方式
编译当前目录下能找到的所有py文件:
import AutoCython
ac = AutoCython()
ac.compile()
自定义
AutoCython类接受4个参数,默认为:compile_path='.', exclude=[], mode='f', delete=['b', 'p', 'c']
compile_path : str ,需要编译的目录;
exclude : list,需要排除的目录或者文件:
eg :['./abc', './a_path/test.py', 'test2.py']
这么写会排除目录./abc下的所有.py文件,排除./a_path/test.py文件,排除所有名为test2.py的文件不进行编译
mode : str, 指定使用CPU核心数:
'f' : 使用全部CPU核心数量的四分之一
'n' : 只使用一个,相当于单进程
'4' : 使用4个CPU核心,输入指定使用的数目
delete : list, 指定编译后需要清理的临时文件,一般默认就好:
b : build文件夹
p : 中间文件setup_file py文件
c : 产生的c文件
s : 源代码文件,慎用
all: 全部清理
例子:
编译目录 D:/python_code/ProjectPath
下的所有 .py
文件;
排除所有名为 tmp.py
的文件,排除 ./ProjectPath/print_cy.py
文件,排除 ./ProjectPath/data/tmp
目录下的文件不编译;
使用8个CPU核心;
只删除编译后产生的 build
文件夹和中间文件 setup_file
,保留 C
代码。
import AutoCython
ac = AutoCython(
compile_path='D:/python_code/ProjectPath',
exclude=['tmp.py','./ProjectPath/print_cy.py','./ProjectPath/data/tmp'],
mode='8',
delete=['b', 'p']
)
ac.compile()
AutoCython
类里 compile
和 compile_file
函数的使用和函数参数请参考源代码,参数功能为控制阻塞,并发处理等。
错误处理
在这个目录下:
运行如下代码只编译目录 build_test\
下的 .py
文件;
import AutoCython
ac = AutoCython('./build_test/')
ac.compile()
程序默认会打印出错误文件的错误日志
可以看到 .\build_test\新建文本文档.py
和 .\build_test\test1\test2.py
发生错误,如何手动查看错误信息?
在ipython
下直接打.ac
按TAB
,选择 compile_result
:
再按 TAB
,好了,这时候所有的编译任务都调出来了,错误的任务名称以 ERR_
开头,正确的以 OK_
开头:
选择编号为 2
,错误文件名为 test2
的任务:
其下的属性中其中 err
为错误输出;out
为正常输出;base
为任务 Popen
对象;ExitCode
为编译退出时错误代码,与系统保持一致;PyPath
为源文件目录;PydPath
为编译生成的 pyd
文件目录。
查看错误信息:
可以看到 test2.py
为使用了 Cython
不支持的函数功能 print(end='')
,新建文本文档.py
为文件命名不符合规范,导致编译失败。
- 对于
print(end='')
使用end
参数不能编译通过,可以外部导入一个print_no_end.py
文件,其中自定义end=''
的函数,然后不编译这个print_no_end.py
这个文件就好。 - 解决的方法一是重新命名
新建文本文档.py
,让其文件名符合C
命名规范;
至于其他遇到的问题怎么改,请查阅 Cython
的文档,这只是个轮子。重新编译错误文件可以使用 compile_file
函数单独编译。
在编译时系统会为每一个文件分配一个 ID
,如果有同名文件,其中一个错误,可以通过 ID
很好的找到对应的文件进行错误处理。
所以错误处理你只需要按几个 TAB
就可以查看了,我觉得我这里已经写的够懒了!
手动指定不编译
在不需要编译的文件头两行任意一行写上 # AucoCython No Compile
则该文件会跳过编译.
更新记录
1.20220613 更新对Linux的支持,Linux下需要配置gcc&g++ 2.20221123 可以通过文件头手动指定不编译的文件
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file AutoCython-jianjun-1.3.2.tar.gz
.
File metadata
- Download URL: AutoCython-jianjun-1.3.2.tar.gz
- Upload date:
- Size: 20.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d45f566a8846a073f8ed716580f840d8f569df172202a1bfbdacac57eabe446f |
|
MD5 | 0d19dfd5b5325e7838e900822b4bddb5 |
|
BLAKE2b-256 | 3579820d6845679d1939cf43baa477ca785a51d4be72fdd2f47e6845297ae2ab |
File details
Details for the file AutoCython_jianjun-1.3.2-py3-none-any.whl
.
File metadata
- Download URL: AutoCython_jianjun-1.3.2-py3-none-any.whl
- Upload date:
- Size: 17.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aa478af3a8fa85d123e5d65cf2109322f2eec318655df2611839762b67977858 |
|
MD5 | 77bd5a0ba066ecadb39dc3f41c0f7881 |
|
BLAKE2b-256 | c0c5d98e12882eb791ecd86c8b20caa76e87a7780e7e2b9cb69903e67d4a1937 |