C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

Fusion360環境でnumpyがインストール出来ました。

やっとわかりました。当方が使用している環境です。
os: win7 64bit
Fusion360 : ver 2.0.4567
python : 3.5.3
※今回偶々この手順で出来ただけです。アップデート等により変わる可能性も
 ありますので、ご注意を!
※ここの記載は一部未完成・未確認な内容です。確認取れ次第追記するかも。



以下の手順で行いました。アカウントには管理者権限が必要かも。

環境変数の設定

Fusion360APIで使用されるpythonは、通常インストールされるものとは
別の位置にあります。まずそのインストールパスを調べる必要があり、
スプリクトを使用して見つけました。

まず、スプリクトファイルを新たに作成します。
(わかる方はコードのところまで読み飛ばしてください)
f:id:kandennti:20180927123145p:plain
雑な説明で申し訳ないのですが、先が長いので。
主に確認・クリックすべきところは赤印部分です。

新たに作成したスプリクトは ”マイ スプリクト” 内に作成されます。
選択し編集を押すと "spyder" と言うIDEが起動します。
f:id:kandennti:20180927123153p:plain
こんな感じです。ひょっとしたらレイアウトが若干違うかもしれません。
f:id:kandennti:20180927123205p:plain

ここでコードを修正します。

ui.messageBox('Hello script')

が書かれている側をゴッソリ消し、以下のコードをコピペします。

import sys
[print(s) for s in str(sys.path).split(',')]

一度保存し(赤印)実行します。(青印)
f:id:kandennti:20180927123217p:plain

実行後Fusion360自体は何も変わらないのですが、spyderの "Console - ~" タブ
部分にズラズラ出力されます。
f:id:kandennti:20180927123225p:plain
spyderを大きく表示させた方が見やすいです。
ここで表示されるものは各々異なると思います。

パスによってバックスラッシュの表記が異なるのは謎ですが、
"site-packages" の記載されている行が必要です。
今回行ったこの行(パッケージがインストールされるパス)

C:\\Users\\(アカウント名)\\AppData\\Local\\Autodesk\\webdeploy\\production\\24c68c01e0965d221a1a390181f4dbc235d252c7\\Python\\lib\\site-packages

と、"Python"までのパス(python.exeがインストールされているパス)

C:\\Users\\(アカウント名)\\AppData\\Local\\Autodesk\\webdeploy\\production\\24c68c01e0965d221a1a390181f4dbc235d252c7\\Python

の2つを環境変数の "path" に追加する必要があります。

環境変数の追加方法は、検索して頂いた方が確実かと思います。
f:id:kandennti:20180927123238p:plain
”%USERPROFILE%~” でも良いのかも知れませんが・・・。

※他にもパスを確認する方法も有りそうですが、実際に実行した環境から
 パスを得る方が確実と思い、スプリクトで取得しました。

pipのインストール

ここで苦労しました。参考にさせて頂いたサイトがこちら。 
pipのインストール方法

”get-pip.py” を入手します。
https://bootstrap.pypa.io/get-pip.py
こちらを "名前をつけてリンク先を保存" でとりあえず保存します。
この ”get-pip.py” を先程の "site-packages" のフォルダ内に入れておきます。

続いて、コマンドプロンプトを起動します。
今さら聞けない!コマンドプロンプトの使い方【初心者向け】 | TechAcademyマガジン

>python (get-pip.pyまでのパス)\get-pip.py

を実行します。(get-pip.pyまでのパスはD&Dだと手間がかかりません)
赤印部分が実行した際の出力です。
f:id:kandennti:20180927123253p:plain
(実行位置が非常に悪く汚い・・・)

とりあえず、他のパッケージがインストール出来る状態になりました。
(ここでエラーの場合は環境変数の設定が正しくない可能性があります)

numpyのインストール

コマンドプロンプトを起動し以下を実行します。

>python -m pip install numpy

"-m" が必要でした。
f:id:kandennti:20180927123302p:plain

確認

新たにスプリクトを作成し、以下のコードで確認しました。

import numpy as np

ary = np.array([1, 2, 3])
print(type(ary))
print(ary)

f:id:kandennti:20180927123311p:plain
エラー無く

<class 'numpy.ndarray'>
[1 2 3]

が出力されたので大丈夫そうです。

外部パッケージ位置と今後の問題

実はFusion360のアップデートによりPythonの実行ファイルが入っている
フォルダが書き換えられる・変更される等の問題があり、このままの運用は
適さないことが指摘されています。この辺かな?
How can I import module? - Autodesk Community

追記で、外部のパッケージを置く場所です。
本家の "Fusion 360 API and Scripts" では、実際に使用するスプリクトと
同一の所にパッケージを置き、配布するような忠告が記載されていますが、
あまりにも不便です。(回答された方も納得していなかったような・・・)

そこで、こちらを参考にしてみることにしました。
Pythonでimportの対象ディレクトリのパスを確認・追加(sys.pathなど) | note.nkmk.me

まず、パスの位置ですがスプリクトのボタンを押した際出てくるダイアログの
”マイ スプリクト” のどれかの上でコンテキストメニューを表示さ
”ファイルの場所を開く” を選択すると(通常であれば)エクスプローラ
が起動します。
f:id:kandennti:20180927171641p:plain
一階層上のフォルダに移動し、この位置にpipでインストールした
numpyのフォルダを移動しました。
(numpy-1.15.2.dist-info 自体が必要なものかどうかわかりませんが
 一緒に移動しました)
f:id:kandennti:20180927171649p:plain

先程の確認用のスプリクトを実行するとエラーとなります。
f:id:kandennti:20180927171658p:plain
移動した為です。

参考にしたサイトのように、コードを付け加えます。

import os,sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))

import numpy as np

ary = np.array([1, 2, 3])
print(type(ary))
print(ary)

これであればOKです。
f:id:kandennti:20180927171711p:plain

・コピーの場合、どちらを認識しているのかわからなくなってしまう為
 あえて移動しました。(裏目に出る可能性は有るかも)
・個人的な経験上、アップデートがあってもスプリクトが消えたことが無い為
 比較的安全なパスと考えています。
・"アドインの時の事を考えたら、もう一階層上がいいんじゃないのか?"
 と言う気持ちは有ります。
・実際のところ、pipでインストール必要は無いような気がしてます。
 (wheelが何チャラとか有りそうだったので、この方法が楽なのかな?と)
・必要なパッケージを入手すれば、追記した環境変数のpathは削除しても
 良いような・・・。
実際のところ、アップデートが起きないとどうなるかわからないのが本音です。

※全体的に参考になりました。(但しLinuxのようです)
pythonのimportができなくて頑張った話