Maya mayapy.exe 安装 Cython,编译 pyd
Maya mayapy.exe 安装 Cython,编译 pyd
前言
在 Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑 中最后提到,使用 VCForPython27 编译的 pyd,不能在 maya 中使用,这跟编译 mayapy.exe 的 msc 有很大关系,运行 mayapy.exe 就能获取 python 的版本 和 msc 的版本,至于 msc 和 VS 的版本对应,请参阅:MSC VS 版本对应
软件安装
maya2014
vs 2010(只要安装就行,mayapy.exe 会自动找到 msc)
编译和安装 Cython 到 maya2014 的 python lib 中
这里我们需要 Cython 源码,用 maya2014 的 python.exe 来运行 Cython 的 setup.py,这样会自动找到 vs2010 的 msc 来编译 Cython,这样才会和 maya 的 python.exe 的 msc 版本一致。
下载 Cython-0.26,或者在github上下载最新的版本 https://github.com/cython/cython
编译预准备:
在编译前,我们需要在 maya 的安装路径中配置一下编译需要的 python 头文件和 python.lib,根据参考:maya环境下,py -> pyd,里面说的过程是对的,但是细节却有错误,根据编译中的错误提示,我是这样做的:
以下的目的都是以maya的安装目录为前缀的:
1.在 /Python 文件夹中新建一个 include 和 libs 文件夹(这两个文件夹是必须的,我是根据编译过程中的报错找到的这两个文件夹)
2.拷贝 /lib/python27.lib 到 Python/libs
3.拷贝 /include/python2.7 中所有的文件到 Python/include
编译
1.把下载的 cython 压缩包解压到任何路径(不建议中文路径或者一些奇葩路径)
2.管理员运行 cmd (win 系统),因为最后会拷贝编译好的 package 到 maya 的安装目录下,可能需要一些权限,尤其是如果 maya 安装在 C 盘。
3.cd 到 解压后的 cython 目录下运行 "[ maya安装目录 ]\bin\mayapy.exe" setup.py install
4.没有报错就表示成功,运行 mayapy.exe >>> import Cython 可以检测是否安装成功
编译 pyd
同样,我们需要用 mayapy.exe 来运行我们的 setup.py:mayapy.exe setup.py build_ext --inplace
至于 setup.py 如何编写,请参考 Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑 中相关部分即可
编译后的 pyd 兼容性
用 maya2014 的 cython 编译出来的 pyd 能兼容到 maya2018,至于更高版本,可能到了使用 python3 的maya就不兼容了。
max2018 python 也兼容,可能也跟 maya 一样,python3 的 max python 就不再兼容
官方版的 python2 也是兼容的
注意点
__init__.py 不能编译成 pyd
关于 .py 中的 __file__ 属性,虽然能编译通过,但是编译成 pyd 后,会报 "__file__ is not defined" 的错误,所以这个要特殊处理一下,__file__属性是import 一个py 模块后产生的,所以我们可以把相关的变量定义到 __init__.py 中
pyd 和 pyc 混合使用
在测试中,由于我的一个模块中有 __file__ 属性,所以我把 pyd 重命名,拷贝一个 pyc 到相应目录下,发现一些 import 该模块的模块中的属性不完整,所以建议:pyd 不要引用 相关联的而不被编译成pyd 的 pyc,py 和 pyc 可以引用 pyd
Maya mayapy.exe 安装 Cython,编译 pyd的更多相关文章
- windows平台下安装、编译、使用mongodb C++ driver
本博客将记录在Win8.1 ,VS2013环境下编译.配置mongodb C++ driver的流程. 1.下载预备 下载Boost:http://sourceforge.net/projects/b ...
- eclipse安装反编译工具
身为一名程序员来说,日常最常做的就是编写代码和查看别人写好的源代码了,有时候打开别人写的class文件发现根本不是自己想要的,所以给大家介绍一种eclipse中反编译class文件的工具. 第一步:下 ...
- WebStorm 8.0安装LESS编译环境的教程
WebStorm是一个非常棒的Web前端开发编辑器,被程序猿们成为“最智能的JavaScript IDE”.对HTML5.Bootstrap框架.Node.js等都有完美支持.目前最新版本为WebSt ...
- win7下nsis打包exe安装程序教程
下载软件包: NSIS中文版 :https://pan.baidu.com/s/1mitSQU0 装好之后会出现两个软件:Nullsoft Install System 和 VNISEdit 编译环境 ...
- eclipse安装反编译插件(附jad下载)
eclipse安装反编译插件(附jad下载) 博客分类: eclipse 一.eclipse反编译插件Jadclipse jadclips插件网站: http://jadclipse.sou ...
- MyEclipse 2017 ci6 安装反编译插件(本人自己摸索的方法,亲测可行)
注: 本文来源于:Smile_Miracle 的< MyEclipse 2017 ci6 安装反编译插件(本人自己摸索的方法,亲测可行) > 第一步:关闭ME,去一下地址下载jad的反编译 ...
- 2.安装Cython
许多科学的Python发行版,例如Anaconda,Enthought Canopy和Sage,捆绑Cython并且不需要设置. 与大多数Python软件不同,Cython需要在系统上存在C编译器.获 ...
- sqlite 安装与编译
本文简述了SQLite的概念,并详细描述了SQLite在Linux和Windows平台下的编译方法 关于 SQLite SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的 ...
- Eclipse 安装反编译插件 Eclipse Class Decompiler
Eclipse Class Decompiler在线安装方法 https://blog.csdn.net/tangjinquan1157/article/details/77506015 Eclips ...
随机推荐
- Python- 索引 B+数 比如书的目录
1.索引 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题, 在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作, 因此对查询 ...
- 洛谷P3247 [HNOI2016]最小公倍数 [分块,并查集]
洛谷 思路 显然,为了达到这个最小公倍数,只能走\(a,b\)不是很大的边. 即,当前询问的是\(A,B\),那么我们只能走\(a\leq A,b\leq B\)的边. 然而,为了达到这最小公倍数,又 ...
- 【MySql】like用法
LIKE用法 SELECT * FROM TABLE WHERE col Like '%a';//检索以a结尾的内容 SELECT * FROM TABLE WHERE col Like '%a%'; ...
- Confluence 6 禁用或者重新启用一个任务
在默认的情况下,所有的 Confluence 计划任务都是默认启用的. 使用 启用(Disable )/ 禁用(Enable )连接操作来启用和禁用每一个计划任务. 不是所有的加护任务都可以被禁用的. ...
- netstat常见基本用法(转)
netstat 简介 Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字. ...
- java 自动包装功能
基本类型直接存储在堆栈中 基本类型所具有的包装容器,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型 基本类型与包装容器类对应如下:boolean Booleanbyte Byte short ...
- java Swing组件和事件处理
1.常见的容器 JComponent是 Container 的子类,中间容器必须添加到底层容器中才能够发挥作用, JPanel 面板 :使用jPanel 创建一个面板,再通过添加组件到该面板上面,JP ...
- CF 494B 【Obsessive String】
很有趣的一道题 这道题提议很难懂,其实就是让你求合法的集合数目.合法的集合定义为: 1.集合中的所有串都是s的子串,且互不重叠 2.集合中的所有串都含有子串t. 看到网上很多题解说要用kmp,但我就不 ...
- Windows Internals 笔记——错误处理
1.Windows函数检测到错误时,会使用一种名为“线程本地存储区”的机制将相应的错误代码与“主调线程”关联到一起.这种机制使得不同的线程能独立运行,不会出现相互干扰对方的错误代码的情况. 2.Get ...
- Unnamed namespaces
Unnamed namespaces The unnamed-namespace-definition is a namespace definition of the form inline(o ...