なんだか似たような話ばかり書いてますが、、、、。
macでpythonのDb2ライブラリ ibm_dbをimportすると発生するエラーへの対応策(Symbol not found: ___cxa_throw_bad_array_new_length )
の対応をした後、VScodeのJupyter notebookではなく、そのまま以下の ibm_db.connectを呼び出すtest.pyをVSCodeから実行したところ、
import ibm_db
DBNAME='xxxx'
USERID='xxxxxxx'
PASSWD='xxxxxxxxxxxxxxxx'
HOSTNAME='xxxxx.xxxxx.xxxxx.xxxx.xxxxx.com'
PORT=50001
conn= ibm_db.connect(f"DATABASE={DBNAME};HOSTNAME={HOSTNAME};PORT={PORT};PROTOCOL=TCPIP;\
UID={USERID};PWD={PASSWD};SECURITY=SSL;", "", "")
ibm_db.close(conn)
conn= ibm_db.connect
の部分で以下のようなmallocエラーが発生しました。
python(32720,0x700007616000) malloc: *** error for object 0x7ff94901c790: pointer being freed was not allocated
python(32720,0x700007616000) malloc: *** set a breakpoint in malloc_error_break to debug
このエラーへの対応策を説明します。
参考:
Qiitaの記事macOSでGUIアプリの環境変数を設定する方法探求を参考にさせていただきました。
対応策
これは
macでpythonのDb2ライブラリ ibm_dbをimportすると発生するエラーへの対応策(Symbol not found: ___cxa_throw_bad_array_new_length )
で設定したDYLD_LIBRARY_PATH
が設定されないために発生するエラーでした。
フォルダーを開く場合はそのフォルダーに.env
を置いてその中にDYLD_LIBRARY_PATH
が設定してあればこのエラーはでません。
例:
DYLD_LIBRARY_PATH=/usr/local/lib/gcc/8:$DYLD_LIBRARY_PATH
Dockから開いたVSCodeでファイル単品xxxx.pyを開いてしまうと、.env
が読み込まれず、このエラーが出るようです。
VSCodeをDockから開いた時にもDYLD_LIBRARY_PATH
を設定しておく必要があります。
その設定をするには以下のようにします。
以下のファイルをsetenv_DYLD_LIBRARY_PATH.plist
というファイル名で~/Library/LaunchAgents/
に置きます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>setenv_DYLD_LIBRARY_PATH</string>
<key>ProgramArguments</key>
<array>
<string>/bin/launchctl</string>
<string>setenv</string>
<string>DYLD_LIBRARY_PATH</string>
<!-- 以下は必要応じて自分のPATHに変更 -->
<string>/usr/local/lib/gcc/8:$DYLD_LIBRARY_PATH</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
この後システムをリブートするかログインし直せば、設定が有効になります。
今すぐ適用する場合は以下を実行します。
launchctl load ~/Library/LaunchAgents/setenv_DYLD_LIBRARY_PATH.plist
以上です。