なぜ
- オフライン環境
- 非管理者権限
なのかですが、私がいる職場の環境がセキュリティ上の理由からインターネットに接続不可能なクローズドネットワーク上にあるからですが、それでもPython環境が欲しかったからです。
Python + Visual Studio Codeがあると、ちょっとしたアプリ作成やデータ抽出に便利です。それを最近構築したので、手順とメモをまとめたのが本記事です。最初はPython Embeddedで構築を試みましたが、不都合があったので、WinPythonを使用しています。
また、
- 外部パッケージの追加手順
- Visual Studio Code拡張機能(extensions)のインストール手順
も解説しています。
事前確認が必要なこと
色々あるかもしれませんが、
- 職場のポリシー
- 32 or 64bitどちらをインストールするか
は事前確認事項。
職場のポリシーは要確認
グループポリシーなどで管理者権限を与えていないということは、原則論的に解釈すれば「ソフトの新規インストールは許可していない」という意味にもとれるので、事前に上長か管理部署に確認するのが厳密に言えば本筋です。
ただ、そこまで厳しく管理している職場はないかもしれませんが。
32 or 64bitのどちらを使うか
例えば、Oracle Databaseに接続する場合、OS環境にインストールされているクライアントが32bitのみであれば64 bitのPythonをインストールしても使用できません。
但し、OracleであればInstant Client(無料で使える)をダウンロードして置けばよいだけなので、回避策がある場合もあります。ですが、まぁ一応、注意点です。
Python embeddable packageでは不都合がある
Windows版Pythonにはembeddable packageというものがあります。これは何かと言うと、他のアプリへの組込用に最適化された最小限のPython環境で、pipも含まれていません(後からインストールはできる)。
本来の目的とは多少異なりますが、インストール不要で使用できるものではあります。
ちなみに、通常のPythonとはインストール先のフォルダ構成も違います。標準ライブラリがpython[version].zipに入れられている、など。
VS Codeのインテリセンスがうまく効いてくれない
開発環境としてはVisual Studio Codeを使用しているのですが、色々試したもののインテリセンスの挙動が思わしくありませんでした。なので、結局、embeddableは使用を見送ることに。
PythonのLanguage Serverを「Microsoft」にした時の挙動です。標準ライブラリのインテリセンスは効かないのに、外部ライブラリはできているようでした。setting.jsonも設定してやる必要があります。setting.jsonを編集するには、Ctrl+Shift+P でCommand Paletteが出るので、そこで「setting」と入れると「Preference: Open Settings (JSON)」が出ると思うので、そこに追記します。
Language Serverの設定は以下の通り。事前に、Python拡張機能を入れる必要があります。
setting.jsonの値は以下のようにしてみました。ちなみに、python.analysis.extraPaths
はPylanceインストールで追記されたものです(Microsoft Language Serverだと恐らく必要ない)。
{
"workbench.startupEditor": "newUntitledFile",
"python.pythonPath": "C:\\app\\python-3.9.1-embed-amd64\\python.exe",
"python.autoComplete.extraPaths": [
"C:\\app\\python-3.9.1-embed-amd64\\Lib\\site-packages"
],
"python.languageServer": "Microsoft",
"python.analysis.extraPaths": [
"C:\\app\\python-3.9.1-embed-amd64\\Lib\\site-packages"
]
}
標準ライブラリのインテリセンスは、ちゃんとは効いてくれません。
外部ライブラリは、効いています。
Pylanceの場合はどうでしょうか。
Pythonの設定からLanguage ServerをPylanceにします。
標準ライブラリは効いてくれます。
外部ライブラリの場合は効いてくれません。
インテリセンスが効かなくてもいいなら問題はないのですが、理想的には両方できたほうが開発効率がよいので、困りましたね。
embeddable packageはそもそもアプリへの組込用に最適化されていると思うので、まぁ仕方ないということでしょう…。
オフライン環境だとVS Code拡張機能のインストールにも注意
例えば、Visual Studio CodeのC#拡張機能とか、Visual Studio IntelliCodeは、拡張機能をインストールした後で外部ネットワークに接続しにいくため、オフライン環境では注意が必要です。ただ、C#に関しては、ネットに接続した環境で一旦ダウンロードさせた後に.vscode配下にあるフォルダをコピーすれば解決できますが、IntelliCodeはそうはできないようです。
ちなみに、Visual Studio Codeにはポータブルモードという機能があります。普通、拡張機能のプログラムはユーザーのプロファイル直下に.vscodeフォルダが作成され、その配下に保存されますが、ポータブルモードだと、VS Codeのインストール先にフォルダやファイル一式を置くことができます。
VS Codeをポータブルモードにする方法は簡単で、インストール先フォルダにdataフォルダを作成し、その下にextensionsとuser-dataフォルダを作成するだけ。extensionsフォルダは別環境にもコピーできます。
WinPythonを使う
本家GitHubページにある通り、WinPythonはポータブル版のPythonディストリビューションです。
WinPython is a portable distribution of the Python programming language for Windows
WinPython tools
本家サイト:WinPython
インストール
ファイルですが、上にもあるこちらの本家サイトにSourceForgeもしくはGitHubのリンクがあるので、そこからダウンロードできます。
種類が3つあります。
末尾にdotがつくもの
Python本体とpipなど基本的なもののみ
無印のもの
Python本体 + PyQt + Spyder + Pytorchも同梱
末尾にcod がつくもの
Python本体 + PyQt + Spyder + VSCodeが付属します。Visual Studio Codeを使いたいので、私はこれを使用しました。
詳細な同梱ライブラリはPackageのリンクから見られます。後でインストールすることも可能です。
注意点としては、サイトからのダウンロードがものすごく遅いくらいです。ファイルはexeファイルですが、7zipを展開するだけですので、後は好みの場所に配置するだけです。
インストール作業はこれだけです。展開されたフォルダにexeファイル一式がありますが、これを起動するだけで使えます。
というように、インストール作業は簡単です。まぁ、ポータブル版ですからね。
環境をコピーする(引っ越す)際の注意点
Windows標準のzip圧縮機能だと、圧縮は可能だけど展開に失敗すると思います(Windows 10環境でも)。ZIPにもフォーマットのバージョンによって限界があるのと、各ツールによっても制限事項があるようです。
VS Codeの拡張機能とか、Pythonの外部ライブラリなどをインストールするとファイル数も膨大になると思うので、この点も要注意です。
なので、7-Zipを使用するとよいと思います(もしくは7zに対応したアーカイバー)。
Python外部ライブラリのインストール方法
pipで必要ファイル一式(依存関係があるものも含め)をダウンロードできますので、まず、インターネットに接続したPythonがある環境で、以下のようにコマンドを実行します。例として、openpyxlをインストールすることにします。
-dの後にダウンロード先のフォルダを指定します。
pip download -d download openpyxl
実行して、最後にSuccessfullyと出れば問題なくダウンロードできています。
依存関係があるパッケージもダウンロードできました。
WinPythonフォルダの「WinPython Control Panel」を起動。
下の「Add Packages」をクリックします。
「Install packages」が押せる状態になるので、クリックします。これで、インストールできます(環境によってはかなり時間がかかる)。
パッケージのアンインストールも、この画面からできます。
VS Code拡張機能のインスト−ル
VS Code拡張機能はMarketplaceからダウンロードできるので、一旦ダウンロードしたファイルをインストールするようにします。
手順は別記事の箇所に書いていますので、どうぞ。
以上です。