1

Тема: Спакувати скрипт під віндовс.

Як запакувати готовий скрипт на пітоні, щоб його легко було запустити під віндовс.
Щоб автомвтом встановити всі бібліотеки і сам Python, якщо в жертви його немає.
Треба писати якісь shell скрипти?
В мене лубунта.

2

Re: Спакувати скрипт під віндовс.

Слово "жертва" означає, що ви хочете зробити щось протизаконне?

3

Re: Спакувати скрипт під віндовс.

Ні жертва то замовник. Там простенький скрапінг скрипт але просто треба довстановлювати кілька бібліотек,  якби під лінукс просто написав би скриптик. Напевно поставлю віндовс 10 на віртуальну і спробую подивитись як то виглядає.

4

Re: Спакувати скрипт під віндовс.

Якщо 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 і перед запуском пітона треба буде зробити наступне:

  1. Перевірити наявність встановленого python'а.

  2. Якщо нема, то завантажити і встановити python.

  3. Перевірити та встановити потрібні бібліотеки.

Перевірка наявності інтерпритатора
Запускаємо 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)? Уточніть, як саме ви б їх перевіряли та встановлювали, якби це був лінукс?

Подякували: leofun01, plusxx2

5

Re: Спакувати скрипт під віндовс.

P.Y. написав:

Бібліотеки. Йдеться про пакети (які можна встановити з допомогою pip)? Уточніть, як саме ви б їх перевіряли та встановлювали, якби це був лінукс?

Так це пакети встановлені через pip. Я думаю то зробити просто без перевірки
pip install -r requirements.txt.

6 Востаннє редагувалося P.Y. (10.02.2020 19:59:54)

Re: Спакувати скрипт під віндовс.

Тоді треба згенерувати requirements.txt (наприклад, серією команд echo, що дописують текст у файл), після чого py -версія -m pip install -r requirements.txt

Можливо, щоб не ганяти зайвий раз pip, має сенс після встановлення створювати пустий файл, наявність якого вказуватиме, що необхідні бібліотеки вже було встановлено.

if exist usevstanovleno goto installed
echo ..... >requirements.txt
echo ... >>requirements.txt
echo .... >>requirements.txt
python -3 pip install -r requirements
copy nul usevstanovleno
:installed
py -3 "%~f0" %*
goto :eof

(або ж, краще, створювати файл usevstanovleno самим пітонівським скриптом, який без встановлених залежностей завершиться з помилкою раніше і нічого не створить)

7

Re: Спакувати скрипт під віндовс.

почитав Installing Packages

Using venv:

python3 -m venv <DIR>
source <DIR>/bin/activate

8

Re: Спакувати скрипт під віндовс.

reverse2500 написав:

почитав Installing Packages

Using venv:

python3 -m venv <DIR>
source <DIR>/bin/activate

Типу передавати папку з віртуальним середовищем?

9

Re: Спакувати скрипт під віндовс.

Якщо в скрипті котрий працює під лінукс є такий рядок

 files = os.listdir('./book')

То під віндовс так можна?

 files = os.listdir('\\book')

10

Re: Спакувати скрипт під віндовс.

pluszz написав:

Якщо в скрипті котрий працює під лінукс є такий рядок

 files = os.listdir('./book')

То під віндовс так можна?

 files = os.listdir('\\book')
files = os.listdir('./book')

На вінді також працює

Подякували: leofun01, plusxx2

11

Re: Спакувати скрипт під віндовс.

Нагадало ... :)

Нагадало як я колись в Git писав шляхи в віндузяцькому стилі, а через деякий час дивувався хто це міг таке зробити.

Подякували: 0xDADA11C71