เรามีสคริปต์ Python ในพื้นที่เก็บข้อมูลซอร์สโค้ดซึ่งฉันดูแลรักษาไว้ ลองจินตนาการว่ามันอยู่ในสถานที่
scripts/python/make_salad/make_salad.py
มันถูกตรวจสอบในที่เก็บตามที่เป็นอยู่ ผู้ใช้สคริปต์ต้องการเพียงแค่คลิกที่สคริปต์ใน windows explorer แล้วพวกเขาก็ไป พวกเขาปฏิเสธที่จะใช้บรรทัดคำสั่ง อย่างไรก็ตาม สคริปต์ยังขึ้นอยู่กับแพ็คเกจภายนอกจำนวนมากที่ฉันต้องติดตั้งด้วย ฉันใช้เคล็ดลับต่อไปนี้เพื่อติดตั้งแพ็คเกจใด ๆ ที่จำเป็นในครั้งแรกที่ผู้ใช้รัน บท. มันเป็นไปตามนั้น
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")
อย่างไรก็ตาม ฉันไม่ชอบสิ่งนี้เพราะมันติดตั้งแพ็คเกจไปยังที่เก็บแพ็คเกจส่วนกลาง สิ่งที่ฉันต้องการคือถ้าแพ็คเกจทั้งหมดได้รับการติดตั้งบางอย่าง
scripts/python/make_salad/make_salad.py
/__packages__
/colorama
/pathlib
/iterfzf
...
/fire
จากนั้นไดเร็กทอรีนี้จะอยู่ในพาธการค้นหาเป็นอันดับแรกเมื่อมีการเรียกการนำเข้า เป็นไปได้ไหมที่จะแฮ็กสคริปต์ด้านบนเพื่อที่สคริปต์ข้างต้นจะเป็นไปได้?
หมายเหตุข้อกำหนด
- มีเพียงสคริปต์เดียวเท่านั้นที่ถูกจัดเก็บไว้ในที่เก็บ
- ผู้ใช้จะต้องคลิกที่สคริปต์ใน windows explorer
- จำเป็นต้องติดตั้งแพ็คเกจภายนอกจากภายในสคริปต์
- แพ็คเกจไม่ควรทำให้แพ็คเกจทั่วโลกเสียหาย
venv
มีอยู่แล้วภายในตั้งแต่ Python 3.3 ตามลิงก์ของคุณ - person 9769953   schedule 21.08.2019