У нас есть скрипт Python в нашем репозитории исходного кода, который я поддерживаю. Давайте представим, что это на месте
scripts/python/make_salad/make_salad.py
Он регистрируется в репозитории как есть. Пользователи скрипта хотят просто щелкнуть скрипт в проводнике Windows и все. Они отказываются использовать командную строку. Однако сценарий также зависит от многих внешних пакетов, которые мне нужно установить. Я использовал следующий прием для установки любых пакетов, необходимых при первом запуске пользователя. сценарий. Это похоже на
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.
- Требовать, чтобы pip устанавливал внешние пакеты из скрипта
- Пакеты не должны загрязнять глобальные пакеты
venv
был встроен только с Python 3.3, согласно вашей ссылке. - person 9769953   schedule 21.08.2019