1. 程式人生 > >pycharm編輯、執行abaqus python程式詳解,kernel問題處理等

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。