「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>深層学習(deep learning)]] *目次 [#baf5c8d2] #contents *概要 [#h004167c] -豊富で大規模な文書 -本体部分は必要最小限に抑えられている。 -Pythonのリファレンス実装であるCPythonは、OSS。 **特徴 [#n1646095] ***言語 [#abcd69f2] 複数のプログラミングパラダイムに対応している。 -オブジェクト指向 -命令型 -手続き型 -関数型 -動的型付け ***実装 [#k1d972c6] -参照カウントベースの自動メモリ管理(GC)を持つ。 -さまざまな領域に対応する大規模な標準ライブラリやサードパーティ製の~ ライブラリが提供され、本体にない機能はその都度呼び出して使用する。 -多くのハードウェアとOSに対応(Linux版、Mac版、Win版、32/64bitが存在) **バージョン [#cccd6779] -2.x 系のバージョンと 3.x 系のバージョンが存在。 -2.x 系と3.x 系には互換性がない。 ***Python 2 [#z2093a3d] Python 2.x はレガシー ***Python 3 [#i785d5c1] -Python 3 が Python 言語の現在と未来 -本項の執筆時点で、Python 3なので、~ 本項ではPython 3を取り扱ってる。 *詳細 [#u68fe019] **インストール [#va75989e] ***Linux [#rdeb4b17] -標準でディストリビューションパッケージがインストールされている。 $ python3 -V Python 3.10.4 -pip --インストールは別途、必要になる。 $ sudo apt update -y && sudo apt upgrade -y $ sudo apt install -y python3-pip --ただし、OSの一部のツールがPythonに依存しているため、~ sudoやrootで、グローバル領域にインストールしないようにする。 sudo pip install ... --なんなら、システムのpythonにはpipをインストールしない方が良い。 --別バージョンをインストールしたり、仮想環境を使用したりする。 ---[[システム標準のPythonに別のpythonを追加インストールできる。>LLMのFT#l5db1fb1]] ---[[環境管理>#q0c50a8d]]の技術を使用する([[venv>#id8b0d17]]を使うのが一般的)。 -エイリアス設定 --[[設定ファイル>環境変数の設定方法#y590800f]]を開く。 vim ~/.bashrc --以下のコードを最後の行に追加(操作は[[vi]]と同じ) alias python="python3" alias pip="pip3" --保存したら、sourceする。 source ~/.bashrc ***[[Windows>https://techinfoofmicrosofttech.osscons.jp/index.php?Python%20on%20Windows#ge0e1b3c]] [#w9682eff] **環境管理 [#q0c50a8d] ***virtualenv [#ke6b003a] システム全体のPython環境に影響を与えずに、プロジェクトごとに独立したPython仮想環境を構築するためのツール -仮想環境を有効にするには、activateスクリプトを実行する。 -仮想環境内で必要なパッケージをインストールすると、 --指定したディレクトリにPythonの実行ファイルやライブラリ、pipをコピー --プロジェクト毎に異なるパッケージやバージョンを使用できる。 -仮想環境を無効にするには、deactivateコマンドを実行し元のシステムのPython環境に戻る。 -使い方の例は、「[[Jupyterで>#j9edb499]]」の所に記載した通り。 ***pyenv [#t457e431] [[virtualenv(仮想環境)>#ke6b003a]]ではなくpythonのバージョンを切り替えを簡単にしてくれるツール。 -pyenvと[[virtualenv>#ke6b003a]]を組み合わせて使用することが一般的で、異なるPythonバージョンを管理しつつ、プロジェクトごとに依存関係を分離できる。 -さらに、pyenvにはpyenv-virtualenvというプラグインがあり、これを使うと仮想環境の作成と管理がより簡単になる。 ***venv [#id8b0d17] -[[virtualenv>#ke6b003a]] が Python 3.3 から標準機能として取り込まれたもの。 -純正なので良いと考えるが、新しいため、情報がまだ少ないのが問題。 -Ubuntu 24.04から仮想環境が一般的になっている様なので、[[その手順上>WSL2 Ubuntu 24.04 LTS 2025/1/21#m8a520c5]]で確認すると良いかも。 ***pipenv [#wf3de977] Pipfile.lock を使うパッケージマネージャー的なモノ -以前は、pip + requirements.txtでやっていたらしい。 -自動でvenv環境を作成してくれる。 -パッケージング機能はないらしい。 ***Poetry [#h7d723e5] [[pipenv>#wf3de977]]との大きな機能の違いは、~ パッケージング機能(パッケージのbuild・publish)をサポートしているかどうか。 ***Rye、uv [#e22b4457] 殺意を覚えるほど機能が多いので[[利用時>WSL2 Ubuntu 24.04 LTS 2025/1/21#t65c0b95]]に個別説明 ***Jupyterで [#j9edb499] -Jupyterとプロジェクト(フォルダ構成)は相性が悪いので、カーネルだけを切り替えられるようにする。 -以下の例では「[[virtualenv>#ke6b003a]]」を使用しているが「[[venv>#id8b0d17]]」でもほぼ同様に使用できる。 -[[virtualenv>#ke6b003a]]をインストール $ sudo apt install python3-virtualenv -[[virtualenv>#ke6b003a]]で仮想環境を生成 $ virtualenv -p python3 myenv -作成した仮想環境をアクティブ化 $ source myenv/bin/activate -仮想環境「内」からJupyterを起動すると「myenv」仮想環境のカーネルを使用する。 -仮想環境「内」からJupyterを起動すると~ 「myenv」仮想環境のカーネルを使用する。 --Jupyterを起動 --仮想環境「内」からJupyterを起動 jupyter-lab -仮想環境「外」からJupyterを起動しても「myenv」仮想環境を選択可能にする。 -仮想環境「外」からJupyterを起動しても~ 「myenv」仮想環境を選択可能にする。 --作成した仮想環境を非アクティブ化 deactivate --仮想環境にipykernelをインストール --仮想環境「内」にipykernelをインストール $ pip install ipykernel --ipythonのkernelをインストール --仮想環境「内」にipythonのkernelをインストール $ ipython kernel install --user --name=jupyter-myenv --Jupyterを起動 --作成した仮想環境を非アクティブ化 deactivate --仮想環境「外」からJupyterを起動 jupyter-lab **step by step的な [#pc5ae908] ***[[ファースト・ステップ>Pythonファースト・ステップ]] [#v4af3ac8] ***[[セカンド・ステップ>Pythonセカンド・ステップ]] [#v2a70cb9] ***[[サード・ステップ>Pythonサード・ステップ]] [#b1e4534c] **環境構築履歴メモ [#la989816] ***[[WSL2 Ubuntu 24.04 LTS 2025/1/21]] [#sd14ca9a] ***[[Ubuntu 24.04 on Azure via Bastion 2025/2/27]] [#x66ad889] ***復号中継機能付きのプロキシを経由する場合 [#y9ac7218] 以下はLinuxを想定しているが、Windowsでも、凡そ同じように設定可能。~ (Windows環境のPythonも、Linux発のPythonは、自動的にWindowsのプロキシ設定を使用しない) -Pythonから復号中継機能付きのプロキシを経由する場合、以下の様に設定する。 --ルート証明書をダウンロードし、プロキシのルート証明書を任意のフォルダに置く --次の環境変数を設定する HTTP_PROXY="http://umproxy.prx.intra.hitachi.co.jp:8080" HTTPS_PROXY="http://umproxy.prx.intra.hitachi.co.jp:8080" REQUESTS_CA_BUNDLE="<任意のフォルダパス>/XXXXX_Root_CA.cer" -Pythonから復号中継&パススルー機能付きのプロキシを経由する場合、~ 単純な設定では、パススルー時にエラーになる可能性があるので、以下の様に設定する。 --PythonのCA証明書バンドルに、ルート証明書を追加。 import certifi import shutil # certifi が提供する CA 証明書バンドル(通常は .pem ファイル)のパスを取得。 certifi_bundle_path = certifi.where() # 元のバンドルに独自証明書を加えた、新しい証明書バンドルの出力先ファイル名。 new_bundle_path = "combined-ca-bundle.pem" # 元の certifi バンドルを、新バンドル・ファイルにコピー(=ベース)。 shutil.copy(certifi_bundle_path, new_bundle_path) # プロキシ提供元から展開されているルート証明書を読込。 proxy_cer_path = "XXXXX_Root_CA.cer" with open(proxy_cer_path, "r") as proxy_cer_file: proxy_cer_content = proxy_cer_file.read() # 新バンドル・ファイルの末尾に、ルート証明書を追加で書込。 with open(new_bundle_path, "a+") as new_bundle_file: new_bundle_file.write("\n" + proxy_cer_content) --.env ファイルを定義する。 HTTP_PROXY="http://プロキシのFQDN名とかポート番号とか" HTTPS_PROXY="http://プロキシのFQDN名とかポート番号とか" REQUESTS_CA_BUNDLE=combined-ca-bundle.pem --環境変数を読み込み、REQUESTS_CA_BUNDLEを絶対パスに変換 import dotenv import os # 環境変数を読み込み dotenv.load_dotenv() # REQUESTS_CA_BUNDLEに絶対パスを設定する。 os.environ['REQUESTS_CA_BUNDLE'] = os.path.join( os.path.dirname(dotenv.find_dotenv()), dotenv.dotenv_values()["REQUESTS_CA_BUNDLE"]) *参考 [#dce6bed8]