Kami memiliki skrip python di repositori kode sumber yang saya pelihara. Bayangkan saja itu ada di lokasi
scripts/python/make_salad/make_salad.py
Itu diperiksa ke dalam repositori apa adanya. Pengguna skrip hanya ingin mengklik skrip di windows explorer dan berangkat. Mereka menolak menggunakan baris perintah. Namun skripnya juga bergantung pada banyak paket eksternal yang harus saya instal. Saya telah menggunakan trik berikut untuk menginstal paket apa pun yang diperlukan saat pertama kali pengguna menjalankannya naskah. Ini seperti
def install(package):
# This is an evil little function
# that installs packages via pip.
# This means the script can install
# it's own dependencies.
try:
__import__(package)
except:
import subprocess
subprocess.call([sys.executable, "-m", "pip", "install", package])
install("colorama")
install("pathlib")
install("iterfzf")
install("prompt_toolkit")
install("munch")
install("appdirs")
install("art")
install("fire")
import os
import tkFileDialog
import getpass
import json
import shutil
import subprocess
import sys
import pprint
import art
# <snip> out all my business logic
print("Making Salad")
Namun saya tidak suka ini karena menginstal paket ke repositori paket global. Yang saya inginkan adalah jika semua paket diinstal seperti ini
scripts/python/make_salad/make_salad.py
/__packages__
/colorama
/pathlib
/iterfzf
...
/fire
dan direktori ini akan menjadi yang pertama di jalur pencarian saat impor dipanggil. Bisakah skrip di atas diretas sehingga hal di atas bisa dilakukan?
Perhatikan persyaratannya
- Hanya satu skrip yang disimpan di repositori
- Pengguna harus mengklik skrip di windows explorer
- Perlu melakukan pip install paket eksternal dari dalam skrip
- Paket tidak boleh mencemari paket global
venv
baru ada sejak Python 3.3, sesuai tautan Anda. - person 9769953   schedule 21.08.2019