基本ディレクトリ構成
halolib
├── setup.py
└── halolib
├── __init__.py
└── halolib.py
cd [setup.py]と同階層
pip install .
pip uninstall halolib
pip install -e .
editable
モードでは、ライブラリ更新時にpip install
し直さなくても、その内容が即座に反映される。
pip install git+<リポジトリのURL>
__init__.py
とは2つの意味がある
1つはPythonディレクトリを表す役割を担う
1つはモジュールをimportするときの初期化処理を行う
import モジュール名 [as 別名]
あるモジュールの機能を追加する
機能を利用するときは
(モジュール名 もしくは 別名).(機能名)と入力する
#randomというパッケージをimport
import random
#random内のrandintという関数を使う
A=random.randint(0,100)
print(A)
A=[1,2,3,4,5]
#matplotlib内にあるpyplot.pyをimport
import matplotlib.pyplot as plt
#pyplot.pyのplotという関数を使う
plt.plot(A)
plt.show()
from モジュール名 import 機能名
あるモジュールのある機能を追加する。
ある機能のみを追加したいとき、モジュール名を書かずに使うことが出来る。
A=[1,2,3,4,5]
#matplotlibパッケージ内のpyplot.py内にあるplot関数とshow関数の2つのみをimport
from matplotlib.pyplot import plot,show
plot(A)
show()
この2つには大差がないが__init__.py
では意味が変わる。
パッケージの例
test_imt
├── __init__.py
├── main.py
└── sub.py
main.pyの中身
import test_imt.sub as ts
def chkprint2():
ts.chkprint()
print("You use main.py!")
sub.pyの中身
def chkprint():
print("You use sub.py!")
<注意>
パッケージにするときの同じディレクトリ内のモジュールのimportはパッケージ名から書いた方が良い
import (パッケージ名).(モジュール名)
__init__.py
は何も書かなくてもよい。
ただし、importして関数を使いたい時、多少面倒になる。
例えば、main.py
のchkprint2
関数を使い時、次のように入力する。
test.py
import test_imt as ti
ti.main.chkprint2()
#結果
#You use sub.py!
#You use main.py!
"main"とモジュール名を間に入れる必要がでてくる。
モジュール名を書かないと次のようになる。
import test_imt as ti
ti.chkprint2()
#結果
#test.py, line 2, in <module>
# ti.chkprint2()
#AttributeError: module 'test_imt' has no attribute 'chkprint2'
test_imt
にはchkprint2
という関数はない。
main.py
のchkprint2
関数をモジュール名をカットして使いたいときには次のようにする。
```init.py`の中身
from test_imt.main import *
import時
test.py
import test_imt as ti
ti.chkprint2()
#結果
#You use sub.py!
#You use main.py!
ここではfrom ~ imoprt *
を利用する。
import ~
を利用するとモジュール名をカットして関数を使うと先程のエラーが発生する。
このような性質があるので
- モジュール名をカットして使いたい時は
from ~ import *
を使って書く - 単に準備のために作ったモジュールで、公開するとき必要性が無いものは
import ~
を使って書く つ使い分けができる。
例えば、
main.py
の中身を主に使用するならfrom test_imt.main import *
と書く。
sub.py
をプログラム内に取り込むだけで主要な関数が無いならimport test_imt.sub
と書く。