
実現したいこと
- numpyモジュールを任意の場所に配置(インストール?)したい
- 任意の場所にあるnumpyを別の場所あるpythonスクリプトでimportしたい
前提
- あるソフトウェアの拡張ツールをPythonで自作しており、そのツールでnumpyを使用したい
- そのツールはクローズドなコミュニティ内で共有される可能性が高い
- 他ユーザーの環境ではPythonを実行することはできるがnumpyは入っていない
- 各々でnumpyインストールしてもらうというのも、ツール使用のハードルが上がるので避けたい
- 極力簡単にツールを使用できるようにしたいので1フォルダにnumpyもツール本体も全て収めたい
このような場合、どのようにするのがよいでしょうか?
また、上記のような方法でなくとも簡単にnumpyごとツール配布が行える方法があればご教示いただきたいです。
※当方趣味プログラマーなので意味不明なことを言ってしまっていたらすみません
試したこと
pipでusers/***/Local/Programs/Python/Python3.9/Lib/site-packages/numpyに
インストールされたnumpyを任意のフォルダに複製し、以下のコードを実行してインポートを試みた。
(あまりにも無理やりなので、当然エラーが出ました...)
Python
1import sys 2sys.path.append(path/to/numpy) 3 4import numpy 5numpy.ndarray([0,1,0])# Error: AttributeError: file <maya console> line 5: 'module' object has no attribute 'ndarray' #
フォルダ、ファイルの構成は以下のようになっています。
my_tools.pyで上記コードを実行しています。
Tools ├ __init__.py ├ my_tools.py └ lib └ numpy
補足情報(FW/ツールのバージョンなど)
Python 2.7.11

Q.1 Pythonのバージョンについて
> pipでusers/***/Local/Programs/Python/Python3.9/Lib/site-packages/numpyに
インストールされたnumpyを任意のフォルダに複製し
と
> 補足情報(FW/ツールのバージョンなど)
> Python 2.7.11
が一致しません。Python2はさすがにサポートが切れてずいぶん経つのでPython3ですよね?(違ったらごめんなさい。)
Q.2 「を任意の場所に配置(インストール?)したい」の意図を教えてもらえますか?
?普通にpip3 install ではダメな理由というのでしょうか。User権限と管理者権限でインストール先が変わるはずですが、それよりもっと変えたい(何ならvirtualenvしたい?)とかそういうことですか?
---
Python側でNumpyをインストールしようとしてみて、だめならsubprocess.popen(○○)でpip3 install numpyとかしてインポートたらいいのかなとも思います。
ご質問ありがとうございます!
A.1
すみません、記載のバージョンは正しい情報になっております。
もしかして...?と思い、おかしなことをやっている自覚はありつつ複製を試してみた感じでした。
Python 2.7.11というのも、あるソフト内で(具体的にはAutodesk Mayaです)自作ツールを実行する
関係上そのPythonバージョンに合わせざるを得ないという状況になります。
A.2
こちらの意図としては、ワンフォルダにツールに関する全てのコードを収めておき、
配布する時はそのフォルダごと他の方に渡せるのが楽かなと思ったからです。
(当方プログラムに詳しいわけではないので、それ以外の発想が無いというのもあります...)
virtualenvしたい、というわけではないのですが、、
パスさえ通しておけば普通にimportできる自作のモジュールのように
numpyを扱いたい、というのがイメージに近いかもしれません。
A.1でお伝えしたAutodesk Mayaですが、そもそもnumpyが入っていない
ので、自分の環境でだけなんとかしてnumpyを使えるようにしても、他の人の
Mayaにはnumpyが入っていないので動かない、、、ならなんとかnumpyごと
配布したい、という感じになります。
答えになっているか自信はありませんが、よろしくお願いいたします。

ありがとうございます。ちょっと事情が読めました。
https://unpyside.com/blog/2022/12/03/mayapythonadventcalendar2022day3/
にmayaはカスタム版Pythonが入っているので普通にpip installしては行けない、とありました。代わりに、mayapy -m pip install numpyみたいにすればインストールできそうです。
なので、
これをpython上からsubprocessでpopenしたら(Pythonからターミナルを走らせれば)なんとかなりそうです。具体的には
1.mayapyの中でnumpyをインポートしようとする…try except文です
2. うまく行けばハッピー
3.ダメならpopenからmayapy pip install(略)をする※pipがないならget-pip.pyのDLからコマンド指定する
4.インストール後に改めてnumpyをインポート
とかどうですか?
環境が特殊すぎてこちらでは検証できませんのでコメントにて。
> 以下のコードを実行してインポートを試みた。
(あまりにも無理やりなので、当然エラーが出ました...)
どのようなエラーが出たのでしょうか?
上記を実行したpythonのバージョンは、
> pipでusers/***/Local/Programs/Python/Python3.9/Lib/site-packages/numpyに
インストールされたnumpy
を普通にインポートできるpython 3.9と同じ、3.9でしょうか?
> sys.path.append(path/to/numpy)
の「path/to/numpy」は、「.../Tools/lib/numpy」ではなく、「.../Tools/lib」としてますでしょうか?
@fourteenlengthさん
リアクション遅くなりましてすみません。
maya2022で「mayapy -m pip install numpy」をSubprocessから実行してみたところ無事numpyをインストールすることができました。また、try exceptでimoprtできるか試してみて、無理ならsubprocessで...という方法についても上手く行きました。ありがとうございます!
ただ、残念なことにmaya2020など古いバージョン(実は、自分を含め他の方もこちらをメインで使っております...)ではpip自体が入っておらず、「subprocess.call('mayapy -m pip install numpy')」を実行すると「# 結果: 1 #」と表示されpip自体が見つからなかったような結果となってしまっております...
@jbpb0さん
ご質問くださりありがとうございます。
再度確認を行っていたためリアクション遅くなってしまいました。
解答前後してしまうのですが...
> 上記を実行したpythonのバージョンは、を普通にインポートできるpython 3.9と同じ...
実行したPythonのバージョンは2.7.11になります。
> 「path/to/numpy」は、「.../Tools/lib/numpy」ではなく、「.../Tools/lib」としてますでしょうか?
すみません、誤解を生む表現にしてしまいました。
実際にはsys.path.append(path/to/lib)としております。
ですので、つかされたpathは「.../Tools/lib」となっております。
> どのようなエラーが出たのでしょうか?
上記のようにpathの追加を行った後、以下のことを試しました。
(番号順に、連続して試しています)
-----------------------------------------------------------------
1. 「import numpy as np」を実行
--> # エラー: SyntaxError: file <maya console> line 1: invalid syntax #
2. 「import numpy」を実行
--> コンソールには何も出力されず、インポートされたように見えます
3. 「a = numpy.array([1, 2, 3])」を実行
--> # エラー: AttributeError: file <maya console> line 1: 'module' object has no attribute 'array' #
4. 「import numpy as np」を"再度"実行
--> コンソールには何も出力されず、インポートされたように見えます(一度目がなぜうまく行かなかったのか謎です...)
-----------------------------------------------------------------
よろしくお願いいたします。
numpyをインストールして使いたいマシンのOSは何でしょうか (名称、バージョン、CPUの種類)。またそれは質問者さんの環境と同じでしょうか、違うでしょうか。
質問者さん
> 実行したPythonのバージョンは2.7.11になります。
その場合は、python 2.7にインストールされたnumpyを使わないとダメです
ikedasさんが質問してますが、pythonのバージョンだけじゃなく、osとcpu(インテルかarmか)も合わせないとダメです
@ikedasさん
numpyをインストールしたいマシンのOSとCPUの情報です。
・OS --> Windows 10 Pro 64bit (Version: 21H1, OSBuild: 19043.1826)
・CPU --> Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz 3.60 GHz
また、他のPCにもインストールを行いたいと思っておりますが、それらのPCは
Windodws10 Pro 64bitというところは共通ですが、CPUなどはIntel製の他のもの
(マシンによってまちまち)を積んでおります。
@jbpb0さん
ご指摘ありがとうございます!
python2.7をインストールして、そこでnumpyをインストールして試してみようと思います。
osやcpuの規格などによってもインストールすべきバージョン(?)が変わるのですね。
この機会に調べてみようと思います。ありがとうございます。
質問者さん
> numpyをインストールしたいマシンのOSとCPUの情報です。
は、質問を編集して追記してください
> CPUなどはIntel製の他のもの (マシンによってまちまち)
その違いは気にしなくて大丈夫です
あと、書き忘れてましたが、pythonには32bit版と64bit版があり、それも同じじゃないとダメです
(64bit版windowsに32bit版pythonをインストールしても使えるため)
当方のwindowsのpython(anaconda)で、下記のようにして確認してみました
A. python2.7でnumpyを含む仮想環境「py27wnp」を作成
B. 仮想環境「py27wnp」のnumpy一式を、「C:\Users\XXX\Downloads」にコピー
C. python2.7でnumpyを含まない仮想環境「py27wonp」を作成
D. 仮想環境「py27wonp」を有効化し、pythonで下記のコードを実行
import sys
sys.path.append(r"C:\Users\XXX\Downloads")
import numpy as np
そうしたら、以下のエラーが出たので、当方の環境だと、このやり方だと不足してるものがありました
「Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\XXX\Downloads\numpy\__init__.py", line 142, in <module>
from . import core
File "C:\Users\XXX\Downloads\numpy\core\__init__.py", line 71, in <module>
raise ImportError(msg)
ImportError:
(中略)
Original error was: DLL load failed: 指定されたモジュールが見つかりません。」
https://github.com/numpy/numpy/blob/v1.16.6/numpy/core/__init__.py
を見ると、「from . import multiarray」でコケてるようなので、そこから調べると、下記も必要でした
・libiomp5md.dll
・mkl_avx2.dll
・mkl_core.dll
・mkl_intel_thread.dll
・mkl_rt.dll
そこで、仮想環境「py27wnp」にある上記dllを全て別のパスにコピーして、そこを環境変数Pathに追加したら、仮想環境「py27wonp」のpythonでもnumpyのインポートができました
ただし、当方の環境で追加で必要だった上記のdllは、condaでインストールしたanacondaのnumpyだから必要だった可能性があります
pipでインストールしたnumpyの場合は、そうではないかもしれません
(逆に、上記とは別の何かが追加で必要な可能性もあります)
上記の確認結果から分かるように、(numpy以外も含めて)必要なものを全部コピーして、適切に設定すれば、numpyをインストールしてないpython 2.7でも、numpyをインポートできると思います
当方の確認は、同じパソコンの同じpythonの別の仮想環境間で行いましたが、別のパソコンのpython間でも同様のはずです
condaでインストールしたanacondaのnumpyではなく、pipでインストールしたnumpyではどうなるのか、当方のwindowsのpython(anaconda)で、下記のようにして確認しました
A. python2.7でnumpyを含まない仮想環境「py27pipnp」を作成
B. 仮想環境「py27pipnp」を有効化し、そこにpipでnumpyをインストールして、仮想環境を無効化(deactivate)
C. 仮想環境「py27pipnp」にpipでインストールしたnumpy一式を、「C:\Users\XXX\Downloads」にコピー
D. python2.7でnumpyを含まない別の仮想環境「py27wonp」を作成
E. 仮想環境「py27wonp」を有効化し、pythonで下記のコードを実行
import sys
sys.path.append(r"C:\Users\XXX\Downloads")
import numpy as np
そうしたら、numpyをインストールしてない仮想環境「py27wonp」のpythonでも、numpyのインポートができました
上記の確認結果から分かるように、python 2.7にpipでインストールされたnumpy一式を全部コピーして、その場所を「sys.path」に追加したら、numpyをインストールしてないpython 2.7でも、numpyをインポートできると思います
(質問者さんが元々やろうとしてた方法)
当方の確認は、同じパソコンの同じpythonの別の仮想環境間で行いましたが、別のパソコンのpython間でも同様のはずです
