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 ...
随机推荐
- VPS安全配置
VPS安全配置 购买VPS后重装操作系统,以windows server 2008为例. 1 登录服务器 重装操作系统后,第一时间登录服务器,迅速进行安全配置. VPN-->Remote Des ...
- centos7 lamp
yum install libmcrypt libmcrypt-devel mcrypt mhash zlib zlib-devel libpng libpng-devel freetype free ...
- 【论文速读】Yuliang Liu_2017_Detecting Curve Text in the Wild_New Dataset and New Solution
Yuliang Liu_2017_Detecting Curve Text in the Wild_New Dataset and New Solution 作者和代码 caffe版代码 关键词 文字 ...
- SpringCloud入门之应用程序上下文服务(Spring Cloud Context)详解
构建分布式系统非常复杂且容易出错.Spring Cloud为最常见的分布式系统模式提供了简单易用的编程模型,帮助开发人员构建弹性,可靠和协调的应用程序.Spring Cloud构建于Spring Bo ...
- turtle画王思聪吃热狗(杨艳春,何金凝小组)
点击此处查看视频:http://v.douyin.com/RCY8GD/import turtle as t t.setup(450,300) t.pensize(4) t.color('black' ...
- svn与cvs的一些比较
所有的文档都显示SVN可以取代CVS,同时SVN的问题和缺点都被隐藏了.不幸的是,我们并不认为SVN是CVS的替代品,尽管很多缺陷都被修改了.更有甚者,它甚至让人重回VSS.CVS和SVN的比较类似与 ...
- redis参数说明
感谢网友分享. 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,Redis默认会把pid写 ...
- deepin Gtk-WARNING **: 无法在模块路径中找到主题引擎:“adwaita”
虽然没影响使用,但是看着有点不爽. 执行 sudo apt-get install gnome-themes-standard 就可以了.
- [Offer收割] 编程练习赛1
A HihoCoder 1268 九宫 思路: 一般类似于数独的题目都是使用回溯解决,这里由于题目数据较小同样可以直接DFS得出结果.这里我用了一个偷懒的方法(next_permutation),直接 ...
- ApiDoc官方文档
链接地址:https://blog.csdn.net/whatday/article/details/84590795