官方雖然說使用 pip insall 方式就可以順利安裝,但在 Windows 上似乎還有些相依性的問題要先解決,如果是 Linux 或是 Mac 可以去 github issue 列表就會看到解決方式,這裡就不多說了。
首先來說明一下 nest2D 的工作原理,它底層會使用 C++ 的 libnest2D,而 libnest2D 又有用到 Clipper 的裁剪功能、Boost 的 Geometry 等,因此我們也需要編譯這些函式庫。另外,nest2D 是使用 pybind11 的方式來跟 C++ 的 libnest2D 做介接。
如果一開始這些相關的函式庫沒有先準備好,可能在 cmake 過程中就會失敗,另外,如果是透過 pip install 過程中 setup.py 的觸發方式,其程式碼裡面有用到 pypandoc.convert 去讀取 README.md 的內容,因為 pypandoc 有改版,官方已經不建議使用 convert,故還是要下載 nest2D 程式碼來修改,才能避開這個問題,其實不只改這個,還要改 setup.py 裡面的 cmake 參數,由於不知還有多少要改,我這裡不採這個方式編譯。
這裡 nest2D 的編譯方式是直接使用 cmake 而沒透過 setup.py 來觸發 cmake,如果那些相依性的函式庫沒有先準備好的話,過程中大概會遇到一些問題。
底下是我建議的編譯方式,細節我就不說了,但是原則有把握住應該不會有太多問題。
使用 vcpkg 配合 VC 來安裝這些相依性 library,Clipper 在 vcpkg 的名字為 PolyClipping,第一次我不知道,是自己另外下載 code 來編譯,寫此文章的同時,才發現這個方式更快。
另外,從 github 下載 nest2D 時,記得要包含 submodule,才能順便下載 libnest2D 和 pybind11 的原始碼。
假設是指定 Release 編譯(cmake 在產生專案檔時也要指定 Release -DCMAKE_BUILD_TYPE=Release,否則 link 時也會出錯),在 Release 資料夾便會有 build 好的 pyd 檔案及相關的 DLL,直接在 Python import 使用即可。
沒有留言:
張貼留言