VNPY加密教程(Python生成pyd文件)
安装成功之后,再修改设置。让Cython可以找到vcarsall.bat。此处有两种方案。(我采用方案1,亲测可用。方案2未测试,看似可用。)
windows平台使用Microsoft Visual C++ Compiler for Python 2.7编译python扩展
安装Cython
可以使用pip命令安装Cython。
pip install cython

处理vcvarsall.bat
若不处理,可能会出现“Unable to find vcvarsall.bat”错误。
在windows平台上安装python c extension的扩展包是件很痛苦的事情,一般通过安装vc/vs系列来编译C扩展,不过安装包都比较大。或者通过mingw编译,不过有时会在兼容性上出现点问题。
有个好消息就是微软为Python提供了专用的编译器Microsoft Visual C++ Compiler for Python 2.7(包含32位和64位) 下载地址: http://aka.ms/vcpython27
1.下载完成并安装。以本机为例,安装完成后的路径为:
|
1
|
C:\Users\acer\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0
|
2.修改python安装目录下Lib\distutils\msvc9compiler.py文件(如有必要可能msvccompiler.py文件也需要做相应更改,视系统而定),找到get_build_version方法直接return 9.0
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
def get_build_version(): """Return the version of MSVC that was used to build Python. For Python 2.3 and up, the version number is included in sys.version. For earlier versions, assume the compiler is MSVC 6. """ return 9.0 prefix = "MSC v." i = sys.version.find(prefix) if i == -1: return 6 i = i + len(prefix) s, rest = sys.version[i:].split(" ", 1) majorVersion = int(s[:-2]) - 6 minorVersion = int(s[2:3]) / 10.0 # I don't think paths are affected by minor version in version 6 if majorVersion == 6: minorVersion = 0 if majorVersion >= 6: return majorVersion + minorVersion # else we don't know what version of the compiler this is return None |
然后再找到find_vcvarsall方法直接返回vcvarsall.bat的路径(以自己机器安装后的路径为准)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
def find_vcvarsall(version): """Find the vcvarsall.bat file At first it tries to find the productdir of VS 2008 in the registry. If that fails it falls back to the VS90COMNTOOLS env var. """ return r'C:\Users\acer\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat' vsbase = VS_BASE % version try: productdir = Reg.get_value(r"%s\Setup\VC" % vsbase, "productdir") except KeyError: productdir = None # trying Express edition if productdir is None: vsbase = VSEXPRESS_BASE % version try: productdir = Reg.get_value(r"%s\Setup\VC" % vsbase, "productdir") except KeyError: productdir = None log.debug("Unable to find productdir in registry") if not productdir or not os.path.isdir(productdir): toolskey = "VS%0.f0COMNTOOLS" % version toolsdir = os.environ.get(toolskey, None) if toolsdir and os.path.isdir(toolsdir): productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC") productdir = os.path.abspath(productdir) if not os.path.isdir(productdir): log.debug("%s is not a valid directory" % productdir) return None else: log.debug("Env var %s is not set or invalid" % toolskey) if not productdir: log.debug("No productdir found") return None vcvarsall = os.path.join(productdir, "vcvarsall.bat") if os.path.isfile(vcvarsall): return vcvarsall log.debug("Unable to find vcvarsall.bat") return None |
方案2:修改注册表
错误描述:
在从源代码安装Python模块时遇到此错误。可是我明明从官网下载并安装了Microsoft Visual C++ Compiler Package for Python 2.7,且配置了环境变量path。 错误原因:
报这个错误的原因是Python的distutils模块中的msvc9compiler.py并不从环境变量指定的路径中寻找’vcvarsall.bat’,而是通过注册表来寻找…,然而,不知为什么编译器安装过程没有配置注册表。 解决办法:
只要手工把注册表配置好,就可以了。
// 1、打开注册表编辑器
run regedit
// 2、配置
// 2.1、如果你安装的Python是32位的,则,创建如下项:
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Setup\VC
// 2.2、如果你安装的Python是64位的,则,创建如下项:
HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC
// 3、并在此项下新建字符串值:
名称:productdir
数据:vcvarsall.bat所在路径
注意:路径中不包含最后的反斜杠。
3、创建工作目录并生成pyd文件
这里有一个坑。程序所在的目录路径不能包含中文文字。所以我在E盘下创建一个test文件夹,用于放置要处理的python文件。
简单写了一个测试文件(命名为test.py):
#coding:utf-8
def hello():
print("Hello world")
input("<press ENTER to quit>")
在该目录下,再新建一个py文件(命名为setup.py):
from distutils.core import setup
from Cython.Build import cythonize setup(
name = 'Hello world app',
ext_modules = cythonize("test.py"),
)
接着,再打开cmd,跳到该目录并执行如下命令:
- python setup.py build_ext --inplace

参考博客地址:http://yshblog.com/blog/117 ,https://blog.csdn.net/qq_34106574/article/details/81166062
VNPY加密教程(Python生成pyd文件)的更多相关文章
- Python生成pyd文件
Python的脚本文件是开源的,量化策略的安全性没有保障.因此需要保护源码.那么要对Python代码进行混淆.加密保护. 混淆代码,我准备使用pyminifier.而加密处理,就比较麻烦. Pytho ...
- windows平台 python生成 pyd文件
Python的文件类型介绍: .py python的源代码文件 .pyc Python源代码import后,编译生成的字节码 .pyo Python源代码编译优化生成的字节 ...
- Python生成pyc文件
Python生成pyc文件 pyc文件是py文件编译后生成的字节码文件(byte code).pyc文件经过python解释器最终会生成机器码运行.所以pyc文件是可以跨平台部署的,类似Java的.c ...
- pyx文件 生成pyd 文件用于 cython调用
转于:https://www.2cto.com/kf/201405/304168.html 1. 初衷 最近学用python,python不愧是为程序员考虑的编程语言,写起来很快很方便,大大节省开发效 ...
- python 生成 pyc 文件
以 pyc 为扩展名的是Python的编译文件.其执行速度快于 py 文件且不能用文本编辑编辑查看.所以 pyc 文件往往代替 py 文件发布. Python 在执行时,首先会将 py 文件中的源代码 ...
- python生成xml文件
先上代码: #!/usr/bin/env python3 # _*_ coding: utf-8 _*_ from xml.dom.minidom import Document def readFi ...
- Python生成gexf文件并导入gephi做网络图分析
Gephi是一款优秀的复杂网络分析软件,支持导入多种格式的文件.gexf格式是Gephi 推荐的格式,基于 XML.本文是一个用python写的简单Demo,示例如何生成一个典型的gexf格式文件.代 ...
- 使用python生成c文件模板
目标 完成一个python脚本,实现指定名字后,自动生成.c和.h的模板.例如: /** * @file epc.c * @author 陈维 * @version V01 * @date 2017. ...
- python 生成 xml文件 属性的顺序问题
需求很奇葩. 文档示例 <ITEM key="username" eng="User Name" chn="用户名" val=&quo ...
随机推荐
- Response内置对象
request内置对象:主要用来处理用户的请求 response内置对象:处理对用户的响应(在调用service方法时容器会传递过来) response重要方法: public void addCoo ...
- sublime There are no packages available for installation 问题的解决办法
这个是因为IPv6的原因, 因此我们需要修改我们的 /etc/hosts文件. 第一步: 执行: nm-tool 获取DNS的信息 例如: DNS: 192.168.1.11 第二步: 在/etc/h ...
- Cocos Creator 生命周期回调(官方文档摘录)
Cocos Creator 为组件脚本提供了生命周期的回调函数.用户通过定义特定的函数回调在特定的时期编写相关 脚本.目前提供给用户的声明周期回调函数有: onLoad start update la ...
- linux----------yum一些安装命令汇总
1.yum install -y psmisc 安装killall命令 2.yum install -y lrzsz 安装sz(下载)和rz(上传)命令 3.yum ins ...
- 数据结构与算法JS实现
行解算法题,没错,就是这么方便. 当然也可以使用 Node.js 环境来执行,具体参考Node.js官方文档即可. 二 对象和面向对象编程 js中5种数据类型,并没有定义更多的数据类型,但是运用j ...
- Fiddler抓包【2】_捕获设置
1.Fiddler抓web网站请求 手动设置方法一:Tools--->WinINET Options--->连接--->局域网设置--->代理服务器勾选后“高级”---> ...
- 利用Openssh后门 劫持root密码
Linux操作系统的密码较难获取.而很多Linux服务器都配置了Openssh服务,在获取root权限的情况下, 可以通过修改或者更新OpenSSH代码等方法,截取并保存其SSH登录账号密码,甚至可以 ...
- 【JavaScript】常用的数据类型的处理方式
写这篇文章的目的,是在学习过程中反复查找如何对这三种数据类型进行转换的方法,所以干脆总结在一起. 一.字符串 0.includes:string.includes(),查找当前string中是否包含某 ...
- 淘宝客订单api处理优化
首选我们看看api定义: http://open.taobao.com/api.htm?docId=38078&docType=2&scopeId=14474 注意下span这个参数 ...
- pycharm 打开json 文件 \2 自动成了转义字符
打开json 文件 \2 自动成了转义字符 暂时只发现在( \2 ) \ 后面为数字的情况下会出现转义json 文件为是指:在pycharm 中新建 file 后缀为json的文件 如: 1234.j ...