• 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 文件夹中新建一个 includelibs 文件夹(这两个文件夹是必须的,我是根据编译过程中的报错找到的这两个文件夹)

    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安装目录 ]inmayapy.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

    转pyd的py中尽量不要用try,比如导入一个pyd,这个pyd中导入一个不存在的模块,第一次会报出importError,但是你再导入pyd的时候,那个pyd会变成一个默认空的built in模块,并不会报错,这个有点坑

  • 相关阅读:
    10个用Console来Debug的高级技巧
    JS Object对象
    图解你身边的 SOLID 原则
    JavaScript判断数据类型
    三伏天里小试牛刀andriod 开发 #华为云·寻找黑马程序员#
    学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(下)
    开发者的福利,报名即可领取代金券,赢运动手环
    用Python调用华为云API接口发短信
    学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(中)
    学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(上)
  • 原文地址:https://www.cnblogs.com/ibingshan/p/10346354.html
Copyright © 2020-2023  润新知