Pyslvs v0.6 在兩個平台的編譯流程:

  • 環境與安裝套件
    • Git
    • Cython
    • Windows 編譯工具
    • SWIG
    • PyQt
    • Eric IDE
  • 編譯步驟
    • 演算法函式庫
    • Solvespace 函式庫
    • Pyslvs

Pyslvs v0.6 完整編譯流程

這裡說明 Pyslvs v0.6 在兩個平台的編譯流程,目標是從,若是單一平台的步驟會特別標示。

  • Ubuntu 採用 Ubuntu 16.04 (64 Bit) Python 3.5 做示範。
  • Windows 採用 Windows 8 (Build 9600 64 Bit) Python 3.6.1 做示範。
  • Qt 與 PyQt 皆為 5.8.0。

目前 Windows 的 PyQt 5.8 沒有支援 Anaconda,可能得日後更新才會解決問題。

而且使用一般的 Python 編譯,Pyslvs 的體積可以減少很多(377MB > 88MB)

以下是自行編譯分部程式庫與主程式可執行檔

環境與安裝套件

本篇介紹需要使用的工具與其安裝方法。

Git

進行遠端檔案版本控制的工具。

Cython

將 Python 語言轉換成 C++ 以增進運算速度的套件。

使用 pip 安裝 Cython。

$sudo pip3 install cython

>pip install cython

Windows 編譯工具

使用 Windows 的必須安裝 GNU 工具包以使用 Make 功能。

下載新版 MinGW(32 Bit):

https://sourceforge.net/projects/mingw-w64/files/latest/download?source=files

另外必須安裝 Microsoft Visual Studio 以編譯 64 位元的 Cython 程式碼。

只需要安裝 Windows tool kit 就好。Python

https://www.visualstudio.com/downloads/

SWIG

將 C 或 C++ 配上自訂接口後,可以變成其他高階語言函式庫的套件。

  • Ubuntu

    使用 apt 安裝。

    $sudo apt install swig

  • Windows

    下載新版 SWIG:

    http://www.swig.org/download.html

    解壓縮到安裝位置,並將該資料夾加入環境變數。

    例如:C:\swigwin-3.0.12

PyQt

由官方網站下載 Qt 的安裝檔:

https://www.qt.io/download/

選擇 PyQt 有對應的最新版本,否則會無法對應 API。

  • Ubuntu 安裝後請將 Qt 函式庫位址加入 ~/.bashrc 環境變數。

    例如:

    export QTDIR=/opt/Qt/5.8/gcc_64/

    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${QTDIR}/lib/

    export PATH=${QTDIR}/bin:${PATH}

  • Windows 安裝後請將 Qt 函式庫位址加入環境變數。

    例如:C:\Qt\5.8\msvc2015_64\bin

接下來安裝 PyQt。

Ubuntu

需先更新 SIP,這個部分無法用 pip 操作。

確認並刪除 Python 套件安裝位置的 SIP 檔案,例如:

$sudo rm -f /usr/lib/python3/dist-packages/sip*

下載新版 SIP:

https://riverbankcomputing.com/software/sip/download

解壓縮後安裝:

$python3 configure.py

$sudo make install

核對與 Python 內的版本:

$sip -V

>>import sip

>>print(sip.SIP_VERSION_STR)

下載新版 PyQt5:

https://riverbankcomputing.com/software/pyqt/download5

解壓縮後安裝:

$python3 configure.py

$sudo make install

下載新版的 QScintilla 2:

https://riverbankcomputing.com/software/qscintilla/download

解壓縮後安裝 3 個部分:

  • 本體

    $cd Qt4Qt5

    $qmake qscintilla.pro

    $sudo make install

  • Designer

    $cd designer-Qt4Qt5

    $qmake designer.pro

    $sudo make install

  • Python bundings

    $cd Python

    $python3 configure.py --pyqt=PyQt5

    $sudo make install

Windows

使用 pip 安裝 PyQt5。

>pip install pyqt5 -U

使用 pip 安裝 QScintilla 2。

>pip install qscintilla

Python 編譯工具

將 Python 程式碼編譯成可執行檔的工具。

Ubuntu

使用 PyInstaller 即可。

$sudo pip3 install PyInstaller

Windows

使用 PyInstaller 編譯主體,再用 cxFreeze 包裝函式庫。

>pip install cx_Freeze PyInstaller

Windows 如果使用官方來源有編碼錯誤,可以用下面的倉儲:

>pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip

Eric IDE

若要進行程式協同,可以安裝這個 Python 編輯器。

下載新版的 Eric IDE。

http://eric-ide.python-projects.org/eric-download.html

執行其中的 install.py 即可。

$sudo python3 install.py

>python install.py

編譯步驟

下載 Pyslvs 倉儲,並進行子倉儲更新:

git clone https://github.com/KmolYuan/Pyslvs-PyQt5.git

git submodule init

git submodule update

安裝所需 Python 套件。

pip install -r requirements.txt

編譯好的函式庫複製到 core/kernel/ 對應的資料夾下。

如:

  • Ubuntu 的 Python 3.5 命名為 py35
  • Windows 的 Python 3.6 命名為 py36w

並在 core/calculation/calculation.py 中加入匯入名稱。

if py_nm=='36w':
    from ..kernel.py36w.slvs import *
    from ..kernel.pyslvs_generate.py36w import tinycadlib
    from ..kernel.pyslvs_generate.py36w.planarlinkage import build_planar
    from ..kernel.pyslvs_generate.py36w.rga import Genetic
    from ..kernel.pyslvs_generate.py36w.firefly import Firefly
    from ..kernel.pyslvs_generate.py36w.de import DiffertialEvolution

演算法函式庫

進入 core/kernel/pyslvs_generate/pyslvs_generate 資料夾。

make

將產生以下的函式庫:

  • de (so or pyd)
  • firefly (so or pyd)
  • planarlinkage (so or pyd)
  • rga (so or pyd)
  • tinycadlib (so or pyd)

Solvespace 函式庫

進入 core\kernel\python-solvespace-lite\solvespace\exposed 資料夾。

python configure.py

make

將產生以下的函式庫:

  • _slvs (so or pyd)
  • libslvs (so)
  • slvs.py

Pyslvs

在倉儲頂層目錄中。

make

編譯成功後會跳出程式執行,結束即可。

編好的執行檔位於 dist/Pyslvs 中,主程式為 launch_pyslvs(exe)。

可以將程式用 Debian 包裝或壓縮發佈。


Comments

comments powered by Disqus