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安裝目錄 ]\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

轉pyd的py中盡量不要用try,比如導入一個pyd,這個pyd中導入一個不存在的模塊,第一次會報出importError,但是你再導入pyd的時候,那個pyd會變成一個默認空的built in模塊,並不會報錯,這個有點坑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM