「インストール - Python」の版間の差分
26行目: | 26行目: | ||
#: <code>cd Python-3.8.6 && mkdir build</code> | #: <code>cd Python-3.8.6 && mkdir build</code> | ||
# 次に、Makefileを生成するため、以下のコマンドを実行する。<br>Pythonを共有ライブラリ付きでインストールするには、<code>--enable-shared</code>オプションを付加する。<br><code>rpath</code>を指定する理由は、ダイナミックリンクを行う側に、リンクするlibpython3.8.soの場所をフルパスで記憶させるためである。 | # 次に、Makefileを生成するため、以下のコマンドを実行する。<br>Pythonを共有ライブラリ付きでインストールするには、<code>--enable-shared</code>オプションを付加する。<br><code>rpath</code>を指定する理由は、ダイナミックリンクを行う側に、リンクするlibpython3.8.soの場所をフルパスで記憶させるためである。 | ||
#: <code>../configure --enable-optimizations --enable-shared --prefix=/home/ユーザ名/InstallSoftware/Python/Python-3_8_6 LDFLAGS="-Wl,-rpath /home/ユーザ名/InstallSoftware/Python/Python-3_8_6/lib64"</code> | #: <code>../configure --enable-optimizations --enable-shared --prefix=/home/ユーザ名/InstallSoftware/Python/Python-3_8_6 \</code><br><code>LDFLAGS="-Wl,-rpath /home/ユーザ名/InstallSoftware/Python/Python-3_8_6/lib64"</code> | ||
# Pythonのソースコードのコンパイルを行う。(<code>-j 8</code>オプションを使用することで、ジョブ数を増加させて高速処理を行う) | # Pythonのソースコードのコンパイルを行う。(<code>-j 8</code>オプションを使用することで、ジョブ数を増加させて高速処理を行う) | ||
#: <code>make -j 8</code> | #: <code>make -j 8</code> | ||
40行目: | 40行目: | ||
#: <code>export LD_LIBRARY_PATH="$HOME/InstallSoftware/Python/Python-3_8_6/lib64:$LD_LIBRARY_PATH"</code> | #: <code>export LD_LIBRARY_PATH="$HOME/InstallSoftware/Python/Python-3_8_6/lib64:$LD_LIBRARY_PATH"</code> | ||
<br> | <br> | ||
<code>--enable-shared</code> | <code>--enable-shared</code>オプションを使用する場合の注意点として、<br> | ||
python実行ファイルやmod_wsgiライブラリ等のダイナミックリンクを行う側は、libpython3.8.soライブラリに依存するが、<br> | |||
libpython3.8.soライブラリを使用しない状態になる可能性がある。<br> | |||
<br> | <br> | ||
例えば、/usr/local/Python-3.8.6ディレクトリにインストールして、/usr/local/Python-3.8.6/bin/pythonを実行する場合、<br> | 例えば、/usr/local/Python-3.8.6ディレクトリにインストールして、/usr/local/Python-3.8.6/bin/pythonを実行する場合、<br> | ||
50行目: | 50行目: | ||
複数のバージョンのPythonを並列して使用する場合、ユーザが手動で環境変数の切り替えを行う必要があり、煩雑になる。<br> | 複数のバージョンのPythonを並列して使用する場合、ユーザが手動で環境変数の切り替えを行う必要があり、煩雑になる。<br> | ||
<br> | <br> | ||
<u> | <span style="color:#CC0000"><u>そのため、必ず、<code>rpath</code>オプションを指定してPythonをインストールしなければならない。</u></span><br> | ||
<br><br> | <br><br> | ||
2021年3月22日 (月) 08:41時点における版
Pythonのダウンロード
こちらの公式サイトから、Pythonのソースコードをダウンロードする。
ここでは、最新のPython3.8.6(2020/9/30 現在)の最新を導入するので、"Latest Python 3 Release - Python 3.8.6"を選択する。
または、以下のコマンドを実行してダウンロードする。
mkdir -p ~/InstallSoftware/Python/Python-3_8_6 wget https://www.python.org/ftp/python/3.8.6/Python-3.8.6.tar.xz
依存関係のライブラリのインストール
Pythonをインストールするために、依存関係のライブラリをインストールする。
# CentOS sudo yum install zlib-devel libffi-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel libuuid-devel xz-devel expat-devel # SUSE sudo zypper install zlib-devel libffi-devel libbz2-devel libopenssl-devel ncurses-devel sqlite3-devel readline-devel tk-devel gdbm-devel libuuid-devel xz-devel libnsl-devel
Pythonのインストール
ここでは、Pythonをホームディレクトリにインストールする。
- まず、以下のディレクトリを作成する。
必ず、lib64ディレクトリを作成すること。mkdir -p ~/InstallSoftware/Python/Python-3_8_6/lib64
- ダウンロードしたファイルを解凍するため、以下のコマンドを実行する。
tar xvf Python-3.8.6.tar.xz
- 解凍したディレクトリに移動して、コンパイル用のディレクトリを作成する。
cd Python-3.8.6 && mkdir build
- 次に、Makefileを生成するため、以下のコマンドを実行する。
Pythonを共有ライブラリ付きでインストールするには、--enable-shared
オプションを付加する。rpath
を指定する理由は、ダイナミックリンクを行う側に、リンクするlibpython3.8.soの場所をフルパスで記憶させるためである。../configure --enable-optimizations --enable-shared --prefix=/home/ユーザ名/InstallSoftware/Python/Python-3_8_6 \
LDFLAGS="-Wl,-rpath /home/ユーザ名/InstallSoftware/Python/Python-3_8_6/lib64"
- Pythonのソースコードのコンパイルを行う。(
-j 8
オプションを使用することで、ジョブ数を増加させて高速処理を行う)make -j 8
- コンパイル完了後、インストールを行う。
- configureスクリプトで--prefixオプションを指定する場合
make install
- configureスクリプトで--prefixオプションを指定しない場合
make altinstall
- configureスクリプトで--prefixオプションを指定する場合
- 以下のディレクトリにシンボリックリンクを作成する。
ln -s ~/InstallSoftware/Python/Python-3_8_6/lib64/python3.8/lib-dynload/ ~/InstallSoftware/Python/Python-3_8_6/lib/python3.8/
- .profileファイルまたは.bashrcファイルに、以下のような環境変数パスを追記する。
export PATH="$HOME/InstallSoftware/Python/Python-3_8_6/bin:$PATH"
export LD_LIBRARY_PATH="$HOME/InstallSoftware/Python/Python-3_8_6/lib64:$LD_LIBRARY_PATH"
--enable-shared
オプションを使用する場合の注意点として、
python実行ファイルやmod_wsgiライブラリ等のダイナミックリンクを行う側は、libpython3.8.soライブラリに依存するが、
libpython3.8.soライブラリを使用しない状態になる可能性がある。
例えば、/usr/local/Python-3.8.6ディレクトリにインストールして、/usr/local/Python-3.8.6/bin/pythonを実行する場合、
設定や環境変数によっては、勝手に/usr/lib/libpython3.8.soや/usr/local/Python-3.7.0/lib/libpython3.7.soが使用される危険性がある。
環境変数LD_LIBRARY_PATH
を使用することで、読み込むライブラリの場所を指定できるが、
複数のバージョンのPythonを並列して使用する場合、ユーザが手動で環境変数の切り替えを行う必要があり、煩雑になる。
そのため、必ず、rpath
オプションを指定してPythonをインストールしなければならない。
インストールの確認
ターミナルを起動後、以下のコマンドを実行する。
Pythonのバージョン情報が表示されたら正常にインストールされている。
python3.8 --version
Hello Worldの表示
最後に、Pythonを動かす。
ターミナルを起動して、以下のコマンドを実行する。
python3.8
最下行に、以下のように表示されていれば、Pythonがコマンドを待っている状態である。
>>>
その状態で以下の文を実行すると、その下に"Hello World!"と表示される。
print("Hello World!")
tkinterのインストール
PythonでGUIを使用した描画処理を行う場合は、tkをインストールする。
sudo zypper install python3-tk
tknterが正常にインストールされたか確認する。
ターミナルで確認する場合 python3 -m tkinter Pythonインタラクティブで確認する場合 >>> import tkinter >>> tkinter._test()
また、Python2.xにtkinterをインストールする場合は、以下のコマンドを実行する。
python -m Tkinter
tknterが正常にインストールされたか確認する。
ターミナルで確認する場合 python -m tkinter Pythonインタラクティブで確認する場合 >>> import tkinter >>> tkinter._test()
その他
PyGObjectのインストール
PyGObjectが提供するPythonバインディングを使用して、GTKベースのGUIアプリケーションを実行することができる。
これには、PyGObject、GTK、それらの依存関係をインストールする必要がある。
- パッケージ管理システムでのインストール
- 以下のコマンドを実行する。
- CentOS :
sudo dnf install python3-gobject gtk3
- SUSE :
sudo zypper install python3-gobject python3-gobject-Gdk typelib-1_0-Gtk-3_0 libgtk-3-0
- 以下のサンプルコードを実行する。
python3 Sample.py
- PIPコマンド(PyPI)でのインストール
- GTKと依存関係をビルドするため、以下のコマンドを実行する。
- CentOS :
sudo dnf install gcc gobject-introspection-devel cairo-devel pkg-config python3-devel gtk3
- SUSE :
sudo zypper install cairo-devel pkg-config python3-devel gcc gobject-introspection-devel
- PycairoとPyGObjectをビルド・インストールするため、以下のコマンドを実行する。
pip3 install pycairo
pip3 install PyGObject
- 以下のサンプルコードを実行する。
python3 Sample.py
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
window = Gtk.Window(title="Hello World")
window.show()
window.connect("destroy", Gtk.main_quit)
Gtk.main()