JMPから起動したときのPython matplotlibインポートDLLエラー私はpyplotをmatplotlibからインポートするpythonスクリプトを持っています。私がこのPythonスクリプトをJMPの外で(Spyder IDEの中から、あるいは単にwindowsのコマンドラインから)実行するとき、それはうまく動きます。しかし、JMPのRun Program機能を使用して、またはOPENを使用して起動した場合、インポートエラーが発生します(下記参照)。
インポートエラーをmatplotlibから上位のft2fontに絞り込んだので、JMP内からそれを複製できます。
Names Default To Here( 1 );
RP = RunProgram(
Executable( "python.exe" ),
Options( {"-c \!"from matplotlib import ft2font\!""} ),
ReadFunction( Function( {this}, Write( this << read ) ) )
);
これがエラーです。
RunProgram( /*object*/ )Traceback (most recent call last):
File "", line 1, in
ImportError: DLL load failed: The specified procedure could not be found.
また、コマンドプロンプトを開いてpython.exe -c "from matplotlib import ft2font"を実行してもエラーになりません。JMPがpythonパッケージのインポートをめちゃくちゃにしていますか?非常によく似た問題があります( こちらをご覧ください一部のmatplotlibユーザはfont_manager.pyのインポートに一般的に持っていますが、それらの人々はいかなる状況でもまったくそれを使用することができません、私にとってはJMPの内側から呼び出すときだけです。
再:PythonのmatplotlibインポートdllエラーJMPから起動したOK、私はこれを解決しました、そしてそれはJMPのせいです。
JMPインストール内にzlib.dllがあり、JMPはwindowsコマンドを起動する前に自分自身をPATHに追加するので、pythonはC:\ Anaconda3 \ Library \ bin \ zlibにあるzlib.dllを見つける前にそのzlib.dllを見つけていましたバッチファイルを使用して最初にディレクトリを変更した場合でも.dll。
私は最初にJMPの外側(cmdウィンドウが始まる場所)のディレクトリを変更し、setコマンドを使用してパスからJMPを削除し、そして以下のように私のPythonスクリプトを起動するバッチファイルを作らなければなりませんでした。
cd c:\
set PATH=%PATH:C:\Program Files\SAS\JMPPRO\14;=%
pythonw.exe "my_gui_app.py"
私のpythonアプリはバッチファイルを呼び出すjsl Run Programコマンドを使ってJMPボタンから起動します。
再:PythonのmatplotlibインポートdllエラーJMPから起動したうーん。それがどうなるかわからない。しかし、私はAnacondaディストリビューションではなく、単純なPythonインストールを実行しています。
ver = "Python 3.6.4";
再:PythonのmatplotlibインポートdllエラーJMPから起動したJMPとあなたが提供したコードの両方で、そしてコマンドラインで、私は同じバージョンを手に入れています:
ver = "Python 3.6.6 :: Anacondaカスタム(64ビット)";
再:PythonのmatplotlibインポートdllエラーJMPから起動したどのバージョンのpythonを使っていますか?
Python 2.7ではなくPython 3.6ではスクリプトを実行すると、このエラーメッセージが表示されます。 JMPとコマンドラインの両方のバージョンで同じ動作が得られます。
複数のPythonをインストールしている場合は、以下のスクリプトを使用してJMPが使用しているバージョンを確認できます。予想されるバージョンを使用していない場合は、python実行可能ファイルへのフルパスを指定する必要があるかもしれません。
ver = Trim(
Run Program(
Executable( "python.exe" ),
Options( "--version" ),
Read Function( "text" )
)
);
Show( ver );