結論
スクリプト先頭で以下を実施すると、import os時に取り込まれた環境変数を変更できる
import os
path_to_dll = r"C:\xxx\include" #追加したいディレクトリ
#PATHへの追加
os.environ["PATH"] = path_to_dll + ";" + os.environ["PATH"]
#新しい環境変数を作成して設定
os.environ["PATH_FOR_XXXX"] = path_to_dll
詳しくは以下のos.environの項を参照
https://docs.python.org/ja/3.13/library/os.html
venv環境でCasADiを使う方法
venv環境の生成
py -m venv venv_casadi
venv環境にcasadiをインストール
pip install casadi
CasADiでNLPの定式化
import casadi
x = casadi.SX.sym("x")
y = casadi.SX.sym("y")
nlp = {
"x" : casadi.vertcat(x,y),
"f" : x**3 + y**2 + 8*x + 4*y**2 + 3*x*y,
"g" : x**2 + y**2 -1
}
S = casadi.nlpsol("S","ipopt",nlp)
print(S)
と、ここで以下のエラー発生。
CasADi - 2025-02-22 20:59:12 WARNING(".../casadi/core/casadi_os.cpp:166: Assertion "handle!=nullptr" failed:
PluginInterface::load_plugin: Cannot load shared library 'libcasadi_nlpsol_ipopt.dll':
(
Searched directories: 1. casadipath from GlobalOptions
2. CASADIPATH env var
3. PATH env var (Windows)
4. LD_LIBRARY_PATH env var (Linux)
5. DYLD_LIBRARY_PATH env var (osx)
A library may be 'not found' even if the file exists:
* library is not compatible (different compiler/bitness)
* the dependencies are not found
)
RuntimeError: ... Plugin 'ipopt' is not found.
'libcasadi_nlpsol_ipopt.dll'が見つからないとのこと。
一方でdllはvenv環境配下(venvcont\Lib\site-packages\casadi)に存在するので、パスが通っていないだけ。
エラー文言の通り、環境変数CASADIPATHかPATHに入っていれば勝手に拾ってくれるので、以下の通りos.environでパスを追加してから使えばOK
パス追加対応後
先頭でos.environでパスを追加してから実行
import casadi
import os
# パスの追加
path_to_dll = r"C:\work\casadi_test\venv_casadi\Lib\site-packages\casadi"
os.environ["CASADIPATH"] = path_to_dll
os.environ["PATH"] = path_to_dll + ";" + os.environ["PATH"]
# NLPソルバ
x = casadi.SX.sym("x")
y = casadi.SX.sym("y")
nlp = {
"x" : casadi.vertcat(x,y),
"f" : x**3 + y**2 + 8*x + 4*y**2 + 3*x*y,
"g" : x**2 + y**2 -1
}
S = casadi.nlpsol("S","ipopt",nlp)
print(S)
#S:(x0[2],p[],lbx[2],ubx[2],lbg,ubg,lam_x0[2],lam_g0)->(x[2],f,g,lam_x[2],lam_g,lam_p[]) IpoptInterface
r = S(x0=[0, 1], lbg=0, ubg=0)
x_opt = np.array(r["x"])
print("x_opt: ", x_opt)
"""
******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
Ipopt is released as open source code under the Eclipse Public License (EPL).
For more information visit https://github.com/coin-or/Ipopt
******************************************************************************
This is Ipopt version 3.14.11, running with linear solver MUMPS 5.4.1.
Number of nonzeros in equality constraint Jacobian...: 2
...
"""