パッケージをimportして用いるのが一般的なpythonプログラミングですが、
そのままパッケージの中の自分が利用している部分を理解できないのであればブラックボックス化してしまうためよくないと考えていたのですが、
パッケージの中身って、どれも確認が可能なものなのでしょうか?
利用している部分の確認ができるのであれば、パッケージを開いてその部分を理解する事が気軽にできるのであれば、そうすれば問題はないと思うのですが。
指摘された方法でcv2のありかを確認すると、
<module 'cv2.cv2' from '/usr/local/lib/python3.7/dist-packages/cv2/cv2.cpython-37m-x86_64-linux-gnu.so'>
と出たのですが、
local/libってどこなんでしょうか・・・。
C:\Users\名前・・・
以下ディレクトリでは、ないですよね?Usersになってるし、localでなく名前になってるし・・・。
これ本当に自分のPC内の参照なんでしょうか・・・?これが1つ目の質問です。
更に関連する事でもう1つ、
こんな感じの階層になってるんですが、これ、いらないものも入ってますが、合ってますかね、
パッケージの「中」を見て、ブラックボックス化を避けるためには、パッケージの「場所」を知るためではだめで、次は、「どの関数がどの部分にあるか」を探す必要があるんですが、
良い方法はありますかね?これが2つ目の質問です。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
Q.パッケージの中身って、どれも確認が可能なものなのでしょうか?
Ans.可能です。
例えばpip
を用いてインストールしているパッケージやモジュールはpip show
というコマンドでソースコードが保存されているフォルダ(ディレクトリとも言います)のパス(要は場所)を確認することが出来ます。
例えば、Pythonの代表的なWebフレームワークであるFlask
の中身を確認したいときは
pip show flask
とターミナルで打てば下記のような情報が表示されます。
Name: Flask Version: 1.1.2 Summary: A simple framework for building complex web applications. Home-page: https://palletsprojects.com/p/flask/ Author: Armin Ronacher Author-email: armin.ronacher@active-4.com License: BSD-3-Clause Location: /Users/ユーザー名/.pyenv/versions/3.8.2/lib/python3.8/site-packages Requires: Werkzeug, itsdangerous, Jinja2, click Required-by: Flask-SQLAlchemy, Flask-Migrate
上記のLocation
のLocation: /Users/ユーザー名/.pyenv/versions/3.8.2/lib/python3.8/site-packages
にFlaskがあることがわかります。
※念の為言っておくとLocationは質問者さんの環境によって異なる場所になっていると思いますのでこのままの場所を開いても見つかりません。
ちなみに、、、「上記のことがまだよく理解できない。。。」という段階ではモジュールやパッケージの中身を見るのはまだ早いかもしれません。
まずは使用するパッケージ/モジュールの公式のドキュメントや解説記事をしっかり読み込んで使い方を学ぶことに注力するのがおすすめです!
投稿2021/05/13 10:04
編集2021/05/13 10:05総合スコア142
0
ベストアンサー
パッケージの中身って、どれも確認が可能なものなのでしょうか?
Pythonで書かれた部分は、簡単に確認が可能です。
動的リンクライブラリの形で提供されているC言語やアセンブラで書かれた部分は、別途ソースコードをダウンロードすれば確認できます。
Pythonで書かれた部分の確認は以下のように行います。
python
1>>> print(numpy) 2<module 'numpy' from 'C:\Users\myname\anaconda3\lib\site-packages\numpy\__init__.py'>
というように場所を表示して、そこを見ればPythonで書かれた部分は簡単に確認できます。
また、Pythonで書かれた関数などはinspectモジュールをimportすれば、inspect.getsource関数を使ってソースを表示することが出来ます。
少々長いですが以下のような感じです。
python
1>>> print(inspect.getsource(numpy.split)) 2@array_function_dispatch(_split_dispatcher) 3def split(ary, indices_or_sections, axis=0): 4 """ 5 Split an array into multiple sub-arrays as views into `ary`. 6 7 Parameters 8 ---------- 9 ary : ndarray 10 Array to be divided into sub-arrays. 11 indices_or_sections : int or 1-D array 12 If `indices_or_sections` is an integer, N, the array will be divided 13 into N equal arrays along `axis`. If such a split is not possible, 14 an error is raised. 15 16 If `indices_or_sections` is a 1-D array of sorted integers, the entries 17 indicate where along `axis` the array is split. For example, 18 ``[2, 3]`` would, for ``axis=0``, result in 19 20 - ary[:2] 21 - ary[2:3] 22 - ary[3:] 23 24 If an index exceeds the dimension of the array along `axis`, 25 an empty sub-array is returned correspondingly. 26 axis : int, optional 27 The axis along which to split, default is 0. 28 29 Returns 30 ------- 31 sub-arrays : list of ndarrays 32 A list of sub-arrays as views into `ary`. 33 34 Raises 35 ------ 36 ValueError 37 If `indices_or_sections` is given as an integer, but 38 a split does not result in equal division. 39 40 See Also 41 -------- 42 array_split : Split an array into multiple sub-arrays of equal or 43 near-equal size. Does not raise an exception if 44 an equal division cannot be made. 45 hsplit : Split array into multiple sub-arrays horizontally (column-wise). 46 vsplit : Split array into multiple sub-arrays vertically (row wise). 47 dsplit : Split array into multiple sub-arrays along the 3rd axis (depth). 48 concatenate : Join a sequence of arrays along an existing axis. 49 stack : Join a sequence of arrays along a new axis. 50 hstack : Stack arrays in sequence horizontally (column wise). 51 vstack : Stack arrays in sequence vertically (row wise). 52 dstack : Stack arrays in sequence depth wise (along third dimension). 53 54 Examples 55 -------- 56 >>> x = np.arange(9.0) 57 >>> np.split(x, 3) 58 [array([0., 1., 2.]), array([3., 4., 5.]), array([6., 7., 8.])] 59 60 >>> x = np.arange(8.0) 61 >>> np.split(x, [3, 5, 6, 10]) 62 [array([0., 1., 2.]), 63 array([3., 4.]), 64 array([5.]), 65 array([6., 7.]), 66 array([], dtype=float64)] 67 68 """ 69 try: 70 len(indices_or_sections) 71 except TypeError: 72 sections = indices_or_sections 73 N = ary.shape[axis] 74 if N % sections: 75 raise ValueError( 76 'array split does not result in an equal division') 77 return array_split(ary, indices_or_sections, axis)
また、上記の関数のdocstringの部分は以下を実行すれば表示することができます。
python
1print(numpy.split.__doc__) 2または 3help(numpy.split)
投稿2021/05/13 10:41
編集2021/05/13 11:17総合スコア24670
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。