Якщо python встановлено на комп'ютері, то файли з розширенням .py можна, як правило, запускати безпосередньо. Проте, оскільки наперед невідомо, чим саме відкриваються ці файли на цільовому компі (це може бути або інтерпритатор python.exe, або запускач py.exe (у другому випадку з'являється можливість, використовуючи chebang, вказати потрібну версію, якщо їх встановлено декілька), або вибраний користувачем редактор...), які версії пітона встановлено і чи встановлено взагалі, такий підхід незовсім універсальний.
Аналогом шел-скриптів для ДОС/Віндоус є батники. При бажанні, пітонівський файл можна оформити як батник: файлові дається розширення .bat або .cmd, у першому рядку розміщується команда, що запускає Python і передає йому цей же файл як програму, а щоб Python цей перший рядок файлу не бачив, його слід запустити з опцією -x:
@python -x "%~f0" %* & goto :eof
# далі звичайний код на пітоні...
Якщо потрібен python певної версії, замість «python» пишемо «py -версія» (напр., «py -2», «py -3», «py -3.8» і т.п.).
Проте, оскільки треба не лише запустити скрипт, а й попередньо встановити все необхідне для його роботи, коду вище недостатньо — потрібен складніший батник з, імовірно, більш ніж одним рядком команд ОС. Тому в першому рядку буде перехід до основної частини батника, яку треба закоментувати для пітона, розмістивши всередині пітонівського багаторядкового літерала:
@echo off & goto start
'''
:start
:: команди для перевірки та встановлення...
python -x "%~f0" %* & goto :eof
'''
# код на пітоні...
Далі після мітки :start і перед запуском пітона треба буде зробити наступне:
Перевірити наявність встановленого python'а.
Якщо нема, то завантажити і встановити python.
Перевірити та встановити потрібні бібліотеки.
Перевірка наявності інтерпритатора
Запускаємо python або py і перевіряємо код помилки:
py -версія --version >nul
if not errorlevel 103 goto runpython
:: завантаження і встановлення...
:runpython
Якщо python (а отже, й py) не встановлено, система отримує код завершення 9009. Якщо py встановлено, але потрібної версії нема, то код завершення — 103. Якщо все необхідне є, повертається 0. if not errorlevel 103 перевіряє, чи код помилки менший за 103, і якщо це не так (що охоплює обидва випадки невстановленості), здійснюємо інсталяційні дії.
Завантаження і встановлення. Сам я цього руками в командному рядку не робив, але дещо гуглиться:
https://stackoverflow.com/questions/458 … batch-file
https://superuser.com/questions/25538/h … et-or-curl
https://www.python.org/download/releases/2.5/msi/
Якщо взяти за основу приклад у першому посиланні:
powershell -Command "(New-Object Net.WebClient).DownloadFile('https://www.python.org/ftp/python/3.6.2/python-3.6.2.exe', 'C:/Tools/python-3.6.2.exe')"
c:\Tools\python-3.6.2.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0 TargetDir=c:\Tools\Python362
setx path "%PATH%;C:\Tools\Python362\" /M
set path=%PATH%;C:\Tools\Python362\
Бібліотеки. Йдеться про пакети (які можна встановити з допомогою pip)? Уточніть, як саме ви б їх перевіряли та встановлювали, якби це був лінукс?