cython编译Python为c语言

第一种办法:

  • 执行命令:cython test.py
  • 结果:会在同一目录下面生成test.c文件
  • 执行命令: gcc -c -fPIC -I /usr/include/python2.7 test.c
  • 结果: 在同一目录下面生成test.o文件
  • 执行命令: gcc -shared test.o -c test.so
  • 结果: 在同一目录下面生成test.so文件

最后,生成的test.so文件就是需要的文件

第二种办法:

[setup.py]
from distutils.core import setup
from Cython.Build import cythonize
setup(
name = "test",
ext_modules = cythonize("test.py")
)
  • 执行命令: python setup.py build_ext –inplace

第二种办法是对单独文件进行编译,下面介绍一种批量的办法:

#-*- coding:utf-8 -*-_
import os
import re
from distutils.core import Extension, setup
from Cython.Build import cythonize
from Cython.Compiler import Options
# __file__ 含有魔术变量的应当排除,Cython虽有个编译参数,但只能设置静态。
exclude_so = ['__init__.py', 'run.py']
sources = 'backend'
extensions = []
remove_files = []
for source,dirnames,files in os.walk(sources):
for dirpath, foldernames, filenames in os.walk(source):
if 'test' in dirpath:
break;
for filename in filter(lambda x: re.match(r'.*[.]py$', x), filenames):
file_path = os.path.join(dirpath, filename)
if filename not in exclude_so:
extensions.append(
Extension(file_path[:-3].replace('/', '.'), [file_path], extra_compile_args = ["-Os", "-g0"],
extra_link_args = ["-Wl,--strip-all"]))
remove_files.append(file_path[:-3]+'.py')
remove_files.append(file_path[:-3]+'.pyc')
Options.docstrings = False
compiler_directives = {'optimize.unpack_method_calls': False, 'always_allow_keywords': True}
setup(
# cythonize的exclude全路径匹配,不灵活,不如在上一步排除。
ext_modules = cythonize(extensions, exclude = None, nthreads = 20, quiet = True, build_dir = './build',
language_level = 2, compiler_directives = compiler_directives))
# 删除py和pyc文件
for remove_file in remove_files:
if os.path.exists(remove_file):
os.remove(remove_file)
  • 执行命令: python setup.py build_ext –inplace
  • 结果:最后生成.so文件,删除中间结果。

重点提一下,在编译flask代码时,遇到问题,报错:参数不够(大体意思是这样,错误未截图),在compiler_directives中添加: {always_allow_keywords:True}

正如我先前所说,你需要像这样运行Cython编译器。


cython <cython_file><!--autointro-->

查找文件位置Linux和Windows

windows下的cmd用
where pip
可以查找到位置
但再vscode的anaconda的虚拟环境中找不到

linux查找文件的命令:1、find命令,可以查找任何想要的文件;2、locate命令,查不到最新变动过的文件;3、whereis命令,只搜索二进制文件、man说明文件和源代码文件;4、which命令;5、type命令。

1. find

find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。

find的使用格式如下:

`$ find <指定目录

windows一些常用的环境变量

一些常用的环境变量

  • %AllUsersProfile%: 局部 返回所有“用户配置文件”的位置。 {所有用户文件目录 – C:\Documents and Settings\All Users}
  • %AppData%: 局部 返回默认情况下应用程序存储数据的位置。 {当前用户数据文件夹 – C:\Documents and Settings\wy\Application Data}
  • %Cd%: 局部 返回当前目录字符串。
  • %CmdCmdLine%: 局部 返回用来启动当前的 Cmd.exe 的准确命令行。
  • %CmdExtVersion%: 系统 返回当前的“命令处理程序扩展”的版本号。
  • %CommonProgramFiles%: {文件通用目录 – C:\Program Files\Common Files}
  • %ComputerName%: 系统 返回计算机的名称。 {计算机名 – IBM-B63851E95C9}
  • %ComSpec%: 系统 返回命令行解释器可执行程序的准确路径。 C:\WINDOWS\system32\cmd.exe
  • %Date%: 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。
  • %ErrorLevel%: 系统 返回最近使用过的命令的错误代码。通常用非零值表示错误。
  • %HomeDrive%: 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。 {当前用户根目录 – C:}
  • %HomePath%: 系统 返回用户主目录的完整路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。 {当前用户路径 – \Documents and Settings\wy}
  • %HomeShare%: 系统 返回用户的共享主目录的网络路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
  • %LogonSever%: 局部 返回验证当前登录会话的域控制器的名称。
  • %Number_Of_Processors%: 系统 指定安装在计算机上的处理器的数目。 {处理器个数 – 1}
  • %Os%: 系统 返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT。 {操作系统名 – Windows_NT}
  • %Path%: 系统 指定可执行文件的搜索路径。
  • %PathExt%: 系统 返回操作系统认为可执行的文件扩展名的列表。
  • %Processor_Architecture%: 系统 返回处理器的芯片体系结构。值: x86,IA64。 {处理器芯片架构 – x86}
  • %Processor_Identfier%: 系统 返回处理器说明。
  • %Processor_Level%: 系统 返回计算机上安装的处理器的型号。 {处理器型号 – 6}
  • %Processor_Revision%: 系统 返回处理器修订号的系统变量。 {处理器修订号 – 0905}
  • %ProgramFiles%: {程序默认安装目录 – C:\Program Files}
  • %Prompt%: 局部 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。 $P$G
  • %Random%: 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
  • %SystemDrive%: 系统 返回包含 Windows XP 根目录(即系统根目录)的驱动器。 {系统根目录 – C:}
  • %SystemRoot%: 系统 返回 Windows XP 根目录的位置。 {系统目录 – C:\WINDOWS}
  • %Temp%: 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其它应用程序则需要 TMP。 {当前用户临时文件夹 – C:\DOCUME1\wy\LOCALS1\Temp}
  • %Time%: 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。9:16:25.05
  • %UserDomain%: 局部 返回包含用户帐户的域的名称。 {包含用户帐号的域 – IBM-B63851E95C9}
  • %UserName%: 局部 返回当前登录的用户的名称。 {当前用户名 – wy}
  • %UserProfile%: 局部 返回当前用户的配置文件的位置。 {当前用户目录 – C:\Documents and Settings\wy}
  • %WinDir%: 系统 返回操作系统目录的位置。 {系统目录 – C:\WINDOWS}<!–autointro–>

python批量安装三方包

1.先查看自己电脑上有没有需要安装的库,查看安装包列表

pip list 

2.如果没有则安装需要的库

pip install 库名 

3.在D盘新建一个package文件夹,用来存放安装包,执行命令行导出该电脑安装的所有的第三方库列表

pip freeze > D:\package\requirements.txt 

4.打开requirements.txt文件,删除你不需要安装的第三方库

5.下载你所需的第三方库的安装包(根据requirements.txt内容,所以不需要的包,在文档中去掉,避免下载浪费时间)

pip download -d D:\package -r requirements.txt 

6.把package文件夹拷到你需要安装的电脑上,使用命令行进行安装

pip install --no-index --find-links=D:\package -r requirements.txt 

命令需要在拷贝的requirements.txt文件下执行

windows更改com口编号

在使用单片机时和电脑进行通讯时会涉及串口问题,而有些软件的设置要求串口号要符合一定的要求才可以,这个时候就需要能够自己独立更改串口的序号,也就是COM号。那么怎么更改电脑外接串口com号?

  1、右击电脑,在下拉菜单中找到“管理”,点击进入,点击设备管理器,显示如下界面:

  2、其中带有“com3”的端口就是需要更改的,试图把它改为其它序号,右击,点击属性,进入以下界面:

  3、这个窗口上边有四个选项,点击第二个“端口设置”,如下:

  4、点击最下边的“高级”,进入以下界面:

  5、最下方有个com3,并且旁边有一个倒三角,点击一下会显示出所有可选的com好,这里我选择com4,如下:

  6、然后确定,这样com号就被更改掉了,再回到设备管理器查看。

  7、从上边可以看到此时的com号已经变为了com4,更改完成。

winrar去广告

下载resource hacker

以管理员身份打开resource hacker,从File>Open打开winrar.exe

选中String Table > 80:2052,删除1277后面引号的内容。
点击编译图标,再点击保存图标。


STRINGTABLE
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
{
1265,     "当前文件夹"
1267,     "已选项目"
1268,     "已找到 %u"
1269,     "停止"
1275,     "http://www.winrar.com.cn"
1276,     "http://www.buysoftware.cn"
1277,     "##0aN9=<!--autointro-->

tkinter回调与时间绑定

tkinter回调

tkinter无法获取回调函数的返回值:
你无法区这个返回值,你可以设置一个变量,temp=tkinter.StrinVar(),然后在a函数里把return那句换成temp.set(txt)
然后在外部你就可以通过temp.get()获取到这个值了,或者使用全局变量接收这个值.

一般解决方案是设置全局变量。

或者使用多个函数,事件函数和处理函数分开
Command handler 返回值没什么意义——事件是框架处理的,按钮并不知道返回值怎么用。你应该让 Command handler 再调用一次函数,比如这样:

def openPhoto():
filename1 = tkinter.filedialog.askopenfilename()
return filename1
def btnPhoto_click():
filename = openPhoto()
# 处理返回值
btnPhoto = Button(win,text="打开照片",command=btnPhoto_click)

tkinter绑定事件

bind:

bind的用法:控件.bind(event, handler),其中event是tkinter已经定义好的的事件,handler是处理器,可以是一个处理函数,如果相关事件发生, handler 函数会被触发, 事件对象 event 会传递给 handler 函数
基本所有控件都能bind
常见event有:


鼠标单击事件:鼠标左键点击为 <Button-1><!--autointro-->

win10批量结束进程

打开命令提示符后输入:“`

taskkill /f /im notepad.exe

这里的notepad.exe是进程的名称,具体需要关闭的自己查看,按Enter.

对于tkinter关闭后的残余进程虽然名称是tkinter界面名称,但是要关闭需要关闭python进程才有效:

taskkill /f /im Python.exe

否则报错,找不到进程。


[cmd: ['D:\\pf1_system\\Python3.6.1\\python.exe', '-i', '-u', 'F:\\pc_home_work\\pyfile\\plot_zoom_220525.py']]
[dir: F:\pc_home_work\pyfile]
[path: D:\pf\python;D:\pf\python\Scripts;D:\pf1_system\Python3.6.1\Scripts\;D:\pf1_system\Python3.6.1\;D:\pf1_system\python2.7.14\Scripts;D:\pf1_system\python2.7.14\;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;D:\pf1_system\JDK8\bin;C:\Program Files\MATLAB\R2016a\runtime\win64;C:\Program Files\MATLAB\R2016a\bin;C:\Program Files\MATLAB\R2016a\polyspace\bin;D:\pf1_system\PuTTy\;D:\MySQL_php_apa\php-5.6.36-Win32-VC11-x64;D:\MySQL_php_apa\php-5.6.36-Win32-VC11-x64\ext;C:\WINDOWS\System32\OpenSSH\;D:\phpStudy\PHPTutorial\MySQL\bin;C:\Program Files\OpenSSL-Win64\bin;C:\Program Files\Common Files\Autodesk Shared\;D:\pf1_system\Python3.6.1\Lib\site-packages\cmake\data\bin;D:\pf6_tool\Git\bin;D:\pf6_tool\Git\mingw64\libexec\git-core;D:\pf6_tool\heroku\bin;C:\Program Files (x86)\IVI Foundation\VISA\WinNT\Bin\;C:\Program Files\IVI Foundation\VISA\Win64\Bin\;D:\pf5_appli\NI circuit design suit14\Shared\LabVIEW CLI;C:\Program Files (x86)\IVI Foundation\VISA\WinNT\Bin;D:\pf6_tool\pandoc\;D:\pf\nodejs\;C:\ProgramData\chocolatey\bin;D:\pf4_green\PKG-CONFIG;D:\pf4_green\PKG-CONFIG\bin;C:\Users\JOSE\AppData\Local\pnpm;C:\Users\JOSE\.cargo\bin;D:\pf\python\Scripts\;D:\pf\python\;C:\Users\JOSE\AppData\Local\Microsoft\WindowsApps;D:\pf1_system\Bandizip6.14\;C:\s;D:\pf6_tool\heroku\bin;C:\Users\JOSE\AppData\Local\Microsoft\WindowsApps;C:\Users\JOSE\AppData\Local\GitHubDesktop\bin;D:\pf\Fiddler;C:\Users\JOSE\AppData\Roaming\npm;D:\pf\VSCode\bin]
```<!--autointro-->