やりたいことは題名の通り。
Pythonの仮想環境を丸ごと配布して、モジュールのインストールとか諸々をすっ飛ばしてPythonを実行させたい。
具体的な流れは以下の通り。
Venvで作成した環境(フォルダ)を丸ごと配布する。
※フォルダ内にactivateさせる為のbatファイルとps1ファイルをぶち込んでおく。
↓
配布先でデスクトップ等にbatファイルのショートカットを作成させる。
↓
batファイル ぽちっ
↓
勝手に仮想環境に入って、勝手にコマンド実行して、Pythonファイルを実行してくれた!
以上のようなことはやりたい。
...「Pythonって単語だけ知ってる!」みたいな人が会社にいたので、
「ライブラリ インストールとか無理だろ...」と諦めたのが発端です
独り言は程々にしておきまして、必要なものは以下の4つ。
・作ったVenv環境
(環境構築の方法はGoogle先生に聞けば一発なので割愛)
・batファイル(powershell起動→ps1ファイルを実行させるのに必要)
・ps1ファイル(venvに必要な「activate」だったり「deactivate」を記述)
・配布したいpythonのファイル(今回は"hello world"するだけ)
venv環境構築
Google先生や先人に丸投げするので割愛します。
ファイル構成については重要な部分のみ公開。
最初に中身だけ公開
VENV ファイル構成
├Include
├Lib
├program
│ ├venv_activate.ps1
│ ├ps1_execute.bat
│ └test.py
│
└Scripts
└初期のまま
batファイル
echo "hello world"
powershell -ExecutionPolicy RemoteSigned ./venv_activate.ps1
echo "goodbye world"
pause
中身についての説明
1行目,3行目はテキトーな文言
2行目は「指定したps1ファイルをps1を実行可能なポリシーである[RemotoSigned]で起動させます!」ってことです。
会社でパソコンを配布されていたりするとps1ファイルを実行させようとしても、powershellのポリシーに引っ掛かる可能性があります。なので、そのポリシーを一時的に変更させます。
この手法だとプログラム終了後は[Restricted]というps1を実行できないポリシーに戻す事ができます。
ps1ファイル
cd ..
cd scripts
.\activate
cd ..
cd .\program
python .\test.py
cd ..
cd scripts
deactivate
大事なのは[.\activate]と[deactivate]の2つのコマンドです。
それ以外はディレクトリ移動してるだけなので、そこは自分の環境に合わせて書き換えてください。
自分は[scripts]と[program]という2つのディレクトリを跨ぐ必要があるので、cdコマンドを書いています。
※[python ~~.py]は自分で作成したファイル名に合わせた変更を忘れないように・・・
test.py
print("hello world")
これで以上です。うまくいけば[hello world]と表示されて終了です。
ちゃんとactivateされてるか不安という方はvenv環境にインストールをしていないモジュールをファイル内でインポートを試してみては・・・?
例えば、pandasをインストールせずに
上記と同じような流れで以下ファイルを実行すると
エラーを表示します。
import pandas
print("hello world")
仮想環境にインストールしていないので、「そんなライブラリはありませんけど!!??」ってpythonから怒られるはずです。
# 最後に
これでデスクトップにbatファイルのショートカットを作成すると
ショートカットをダブルクリックするだけでvenv内のpythonファイルを実行してくれます。
これより最適な方法はあるとは思いますが...
これが初めて書いた記事なので見辛いかとは思いますが、
何卒ご容赦を・・・