pycharm編輯、執行abaqus python程式詳解,kernel問題處理等
abaqus python雖然是python,但是由於涉及眾多類庫、配置、動態庫引用等原因,無法直接呼叫,而必須使用abaqus kernel才能執行。這就有點類似在pycharm中使用pyspark一樣。我們知道,整合開發環境(IDE,Integrated Development Environment)只是一個方便寫程式碼的殼子,其執行核心仍然是該語言的主編譯器和後續呼叫命令。例如Java在windows系統下必然有個java.exe可執行檔案,而Python語言也會有一個python.exe。具體到abaqus python,這個就有點不一樣了,我們直接執行安裝好的abaqus目錄下面的python.exe是沒辦法執行abaqus python程式碼的,會發生如下錯誤:
PS D:\SIMULIA\Abaqus\6.14-4\code\bin> .\python.exe
ImportError: No module named site
進一步搜尋我們發現不僅code資料夾下有個python.exe,在D:\SIMULIA\Abaqus\6.14-4\tools\SMApy\下還分別有一個python2.6和python2.7。
PS D:\SIMULIA\Abaqus\6.14-4\tools\SMApy\python2.7> .\python.exe Python 2.7.3 (default, Oct 4 2012, 15:15:08) [MSC v.1600 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from abaqus import * Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:\SIMULIA\Abaqus\6.14-4\tools\SMApy\python2.7\lib\site-packages\abaqus.py", line 10, in <module> import sys, i18n, os, osutils File "D:\SIMULIA\Abaqus\6.14-4\tools\SMApy\python2.7\lib\site-packages\i18n.py", line 6, in <module> import os, os.path, sys, uti, traceback, locale as _locale File "D:\SIMULIA\Abaqus\6.14-4\tools\SMApy\python2.7\lib\site-packages\uti.py", line 9, in <module> import utiinternal File "SMAPyaModules\SMAPyaUtiPy.m\src\utiinternal.py", line 52, in <module> File "SMAPyaModules\SMAPyaUtiPy.m\src\uticty.py", line 145, in <module> File "SMAPyaModules\SMAPyaUtiPy.m\src\uticty.py", line 136, in _loadAbaqusDll ValueError: dll not found: ABQSMABasShared.dll
報錯找不到DLL。這就進入了正題了,python有時候被稱為膠水語言,正式因為它簡潔的語法又能夠呼叫不同語言所編寫的程式,達到了效能和易於程式設計的雙重目的。一般執行程式都會在當前目錄和庫目錄查詢dll檔案,我們搜一下abaqus的安裝目錄,發現找不到的dll檔案在這裡D:\SIMULIA\Abaqus\6.14-4\code\bin,於是我們將其新增到環境變數(這裡使用的是powershell命令)後再執行:
PS D:\SIMULIA\Abaqus\6.14-4\tools\SMApy\python2.7> $env:PATH=$env:PATH+";D:\SIMULIA\Abaqus\6.14-4\code\bin" PS D:\SIMULIA\Abaqus\6.14-4\tools\SMApy\python2.7> .\python.exe Python 2.7.3 (default, Oct 4 2012, 15:15:08) [MSC v.1600 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from abaqus import * Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:\SIMULIA\Abaqus\6.14-4\tools\SMApy\python2.7\lib\site-packages\abaqus.py", line 10, in <module> File "D:\SIMULIA\Abaqus\6.14-4\tools\SMApy\python2.7\lib\site-packages\i18n.py", line 111, in <module> NameError: name 'locale' is not defined >>>
即使添加了環境變數、不報錯找不到DLL後,仍然報錯。
有的網友還遇到了最尷尬的問題,報錯:
ImportError: abaqus module may only be imported in the Abaqus kernel process
abaqus將其內部的呼叫機制全部封裝在了abaqus.bat這個執行源頭上。如果安裝abaqus添加了環境變數的話,會發現只有使用abaqus cae -script zigzag.py這樣的命令才能正確執行abaqus python檔案。其中-noGUI還可提供只生成cae檔案不開啟abaqus主介面的選項。
最終解決辦法:
如果我們僅僅需要編輯abaqus python,用它提供的abaqus PDE就好了,那麼我們為什麼想用pycharm呢?當然是希望使用它強大的型別檢查、程式碼補全功能。因為最終只能呼叫abaqus命令來執行,所以我們就製作了這麼一個“代理·abaqus類庫”,庫中所有引用檔案都只提供型別檢查而不提供真正的可執行語句,當用戶最後save的時候,才去呼叫abaqus主程式。為了使得類庫對原有程式碼的衝擊最小,我們使用環境變數來獲取abaqus主程式的目錄。該專案地址在這裡https://github.com/liangzulin/abaqus_pycharm。
只需要將該專案中的import_files資料夾中的檔案,拷貝到相應python類庫的site-packages資料夾裡邊就可以了。
需要設定一下abaqus環境變數,例如你安裝的abaqus在D:\SIMULIA\Abaqus\,那麼需要在程式碼最前面新增2行:
from os import environ
from abaqus import *
from abaqusConstants import *
from caeModules import mesh
from driverUtils import executeOnCaeStartup
# ====================== 新增這兩行 =========================
environ['ABAQUS_BAT_PATH'] = 'D:\\SIMULIA\\Abaqus\\Commands\\abaqus'
environ['ABAQUS_BAT_SETTING'] = 'noGUI'
session.Viewport(name='Viewport: 1', origin=(0.0, 0.0), width=300, height=140)
session.viewports['Viewport: 1'].makeCurrent()
session.viewports['Viewport: 1'].maximize()
餘下的程式就正常編寫就OK。