ΠΊΠ°ΠΊ ΡΠΎΠ±ΡΠ°ΡΡ python ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° python3&PyQT5 ΠΏΠΎΠ΄ Windows, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ PyInstaller
ΠΡΠΈΡΠΈΠ½ΠΎΠΉ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈ, ΡΠ²ΠΈΠ»ΠΎΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ Ρ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ² Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ: «ΠΠ°ΠΊ ΡΠΎΠ±ΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ c pyqt5», «ΠΠΎΡΠ΅ΠΌΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ», «ΠΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π²ΡΠ±ΡΠ°ΡΡ» ΠΈ Ρ.Π΄. Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π½Π°ΡΡΠΈΠΌΡΡ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΡ Π±Π΅Π· ΠΌΡΡΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ°Π½ΡΠ΅Π² Ρ Π±ΡΠ±Π½ΠΎΠΌ.
ΠΠ°ΠΊ-ΡΠΎ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ desktop-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ python, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΎΠ½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΠ» ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ. Π ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Python ΡΠΆΠ΅ Π²Ρ ΠΎΠ΄ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° tkinter, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ GUI. ΠΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° tkinter Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΏΠΎΡΠ²ΡΡΠ΅Π½ΠΎ ΠΌΠ°Π»ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ, ΠΈ Π½Π°ΠΉΡΠΈ Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ ΠΊΡΡΡ, ΠΊΠ½ΠΈΠ³Ρ ΠΈΠ»ΠΈ FAQ ΠΏΠΎ Π½Π΅ΠΉ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ-ΡΠ°ΠΊΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΠΎΡΡΠΎΠΌΡ Π±ΡΠ»ΠΎ ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΡΡ, ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Qt, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΊ ΡΠ·ΡΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ python Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ PyQT5. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΏΡΠΎ PyQT ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π·Π΄Π΅ΡΡ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄:
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠ΅Π΄ΠΈ ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΠΌΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅: cx_Freeze, py2exe, nuitka, PyInstaller ΠΈ Π΄Ρ. ΠΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ. ΠΠΎ Π½Π°Π΄ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠ΄ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, Ρ ΠΏΡΠ΅Π΄ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΈ pyqt5. ΠΠ΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΌΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ ΠΈ ΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π±Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°Π΄Π΅ΡΡΡ, Π²Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° dev-ΡΡΠ΅Π΄Π΅ ΠΈ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠΎ Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎΠΆΠ΅. Π’Π°ΠΊΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π±ΡΠ»ΠΈ ΡΠ²ΠΎΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ: ΠΎΠ΄ΠΈΠ½ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π»ΡΡ, Π΄ΡΡΠ³ΠΎΠΉ ΡΠΎΠ±ΠΈΡΠ°Π» ΡΠΎ, ΡΡΠΎ Π½Π΅ ΡΠΌΠΎΠ³ ΠΏΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ, ΡΡΠ΅ΡΠΈΠΉ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΎΡΠΊΠ°Π·ΡΠ²Π°Π»ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π΄Π΅Π»Π°ΡΡ.
ΠΠΎΡΠ»Π΅ Π΄ΠΎΠ»Π³ΠΈΡ ΡΠ°Π½ΡΠ΅Π² Ρ Π±ΡΠ±Π½ΠΎΠΌ ΠΈ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ Π³ΡΠ³Π»Π΅Π½ΠΈΠ΅ΠΌ, ΠΌΠ½Π΅ Π²ΡΠ΅ ΠΆΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠΎΠ±ΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ pyinstaller, Π² ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ Pyinstaller
Pyinstaller ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ python-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΠΊΠ΅Ρ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° python ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. Pyinstaller ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ python 2.7 ΠΈ python 3.3+ ΠΈ ΡΠ°ΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠ°ΠΊ: numpy, PyQt, Django, wxPython ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
Pyinstaller ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΡΡ Π½Π° Windows, Mac OS X ΠΈ Linux. ΠΠ°ΠΊ Π±Ρ ΡΠ°ΠΌ Π½ΠΈ Π±ΡΠ»ΠΎ, ΡΡΠΎ Π½Π΅ ΠΊΡΠΎΡΡ-ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ: ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Windows, Π΄Π΅Π»Π°ΠΉ ΡΡΠΎ Π½Π° Windows; Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Linux, Π΄Π΅Π»Π°ΠΉ ΡΡΠΎ Π½Π° Linux ΠΈ Ρ.Π΄.
PyInstaller ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ AIX, Solaris ΠΈ FreeBSD, Π½ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ PyInstaller ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π·Π΄Π΅ΡΡ: Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ.
Π ΡΠΎΠΌΡ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΠΈΠ»ΠΎ Π²ΡΠ΅Π³ΠΎ ΠΎΠΊΠΎΠ»ΠΎ 15 ΠΌΠ±. ΠΡΠΎ ΠΊ ΡΠ»ΠΎΠ²Ρ ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ pyinstaller, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ ΠΏΠΎΠ΄ΡΡΠ΄, Π° ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΡΠ΄Π°Π²Π°Π»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π·Π° 200-300 ΠΌΠ±.
ΠΡΠΈΡΡΡΠΏΠ°Π΅ΠΌ ΠΊ ΡΠ±ΠΎΡΠΊΠ΅
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΡΠ±ΠΎΡΠΊΠ΅ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ pywin32 ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ pyinstaller:
Π§ΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡ, ΡΡΠΎ Π²ΡΠ΅ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡ, Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΡΠ²Π΅ΡΠΈΡΡΡΡ Π²Π΅ΡΡΠΈΡ pyinstaller. ΠΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡ, ΠΈΠ΄Π΅ΠΌ Π΄Π°Π»ΡΡΠ΅.
Π ΠΏΠ°ΠΏΠΊΠ΅ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ cmd ΠΈ Π½Π°Π±ΠΈΡΠ°Π΅ΠΌ:
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΡΠΎ ΠΈ Π΅ΡΡΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ±Π΅ΡΠ΅Ρ Π½Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ pyinstaller ΡΠ°ΠΊΠΎΠ²:
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΎΠΏΡΠΈΠΈ:
PyInstaller Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ°ΠΉΠ» myscript.py ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
Π ΠΈΡΠΎΠ³Π΅ Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
ΠΠΎΡΠ»Π΅ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π΄Π²Π΅ ΠΏΠ°ΠΏΠΊΠΈ: dist ΠΈ build. Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΠΏΠ°ΠΏΠΊΠ΅ dist ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΏΠ°ΠΏΠΊΡ build ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ, ΠΎΠ½Π° Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. ΠΠ°Π΄Π΅ΡΡΡ ΡΡΠ°ΡΡΡ Π±ΡΠ»Π° Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π½Π°.
pyqtdeploy, ΠΈΠ»ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅ΠΌ Python-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² exe’ΡΠ½ΠΈΠΊβ¦ the hard way
ΠΠ°Π²Π΅ΡΠ½ΡΠΊΠ°, ΠΊΠ°ΠΆΠ΄ΡΠΉ, ΠΊΡΠΎ Ρ ΠΎΡΡ ΡΠ°Π· ΠΏΠΈΡΠ°Π» ΡΡΠΎ-ΡΠΎ Π½Π° Python, Π·Π°Π΄ΡΠΌΡΠ²Π°Π»ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡ ΡΠ²ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΠΈΠ»ΠΈ, ΠΏΡΡΡΡ Π΄Π°ΠΆΠ΅, ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΊΡΠΈΠΏΡ) Π±Π΅Π· Π»ΠΈΡΠ½Π΅ΠΉ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ: Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠ°ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ, ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ-exe’ΡΠ½ΠΈΠΊΠΎΠΌ (Π½Π° ΠΊΡΠ°ΠΉΠ½ΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ, Π°ΡΡ ΠΈΠ²ΠΎΠΌ) ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°.
ΠΠ»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΠΌΠ°Π»ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²: PyInstaller, cx_Freeze, py2exe, py2app, Nuitka ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅β¦ ΠΠΎ ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ PyQt? ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ (Π΅ΡΠ»ΠΈ Π½Π΅ Π²ΡΠ΅) ΠΈΠ· Π²ΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΌΠ΅ΡΡ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ PyQt, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ°ΠΌΠΎΠ³ΠΎ PyQt ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ pyqtdeploy. Π ΠΌΠΎΠ΅ΠΌΡ Π½Π΅ΡΡΠ°ΡΡΡΡ, Ρ Π½Π΅ ΡΠΌΠΎΠ³ Π½Π°ΠΉΡΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ Π³Π°ΠΉΠ΄Π° ΠΏΠΎ ΡΠΈΠΌΡ ΡΡΠ΄Ρ, Π½ΠΈ Π½Π° ΡΡΡΡΠΊΠΎΠΌ, Π½ΠΈ Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ. ΠΠ° Ρ Π°Π±ΡΠ΅ ΠΈ Π²ΠΎΠ²ΡΠ΅, Π΅ΡΠ»ΠΈ Π²Π΅ΡΠΈΡΡ ΠΏΠΎΠΈΡΠΊΡ, Π΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄Π½ΠΎ ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅, ΠΈ ΡΠΎ β Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ (ΠΈΠ· Π½Π΅Π³ΠΎ Ρ ΠΈ ΡΠ·Π½Π°Π» ΠΏΡΠΎ ΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ). Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΠΎ: Π½Π΅ ΡΠΊΠ°Π·Π°Π½ ΡΡΠ΄ ΠΎΠΏΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ, Π΄Π»Ρ Π²ΡΡΡΠ½Π΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π»Π΅Π·ΡΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ, Π½Π΅ ΠΎΠΏΠΈΡΠ°Π½ ΡΡΠ΄ ΡΠΎΠ½ΠΊΠΎΡΡΠ΅ΠΉ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ.
ΠΠ°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ Π½Π΅ ΠΏΡΠ΅ΡΠ΅Π½Π΄ΡΠ΅Ρ Π½Π° Π²ΡΠ΅ΠΎΠ±ΡΠ΅ΠΌΠ»ΡΡΠ΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ pyqtdeploy ΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌ, Π½ΠΎ, Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΈΡΡΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΡΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ?
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. Π ΡΡΠ°ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄ linux. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΡΠΎ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»ΠΎΠ²ΠΎ «exe’ΡΠ½ΠΈΠΊ» Π΄Π»Ρ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ Π±ΡΠΊΠ² ΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΡΠΈΡΠ»Π° ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠΉ.
Π’ΡΡ ΠΌΠ½Π΅ ΠΏΠΎΠ΄Π²Π΅ΡΠ½ΡΠ»ΡΡ pyqtdeploy. «Π£ΡΠΈΠ»ΠΈΡΠ° ΠΎΡ ΡΠ°ΠΌΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² PyQtβ¦ ΠΡ ΡΠΆ ΠΎΠ½ΠΈ-ΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊ ΠΏΠΎ-ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΡ ΠΎΡΠ²ΡΠ·Π°ΡΡΡΡ ΠΎΡ Π»ΠΈΡΠ½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π²Π½ΡΡΡΠΈ PyQt ΠΈ Qt?» β ΠΏΠΎΠ΄ΡΠΌΠ°Π» Ρ ΠΈ Π²Π·ΡΠ»ΡΡ ΠΏΠ»ΠΎΡΠ½Π΅Π½ΡΠΊΠΎ Π·Π° ΡΠ΅ΠΉ Π°Π³ΡΠ΅Π³Π°Ρ.
Π’Π°ΠΊ ΡΡΠΎ ΠΆΠ΅ ΡΠ°ΠΊΠΎΠ΅ pyqtdeploy? Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠΈ, ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π²ΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ΅ Π²Π°ΡΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ (ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, PyQt, Π²ΡΠ΅ ΠΏΡΠΎΡΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ) ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Qt (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠΈΠ»ΠΈΡΠ° rcc) Π² ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» ΡΠ΅ΡΡΡΡΠΎΠ², Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΎΠ±Π΅ΡΡΠΊΠ° Π²ΠΎΠΊΡΡΠ³ ΠΏΠΈΡΠΎΠ½ΠΎΠ²ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Π½Π° C++, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ Π²Π°ΡΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ, ΠΈ ΠΏΠΎΡΠΎΠΌ Π²ΡΠ΅ ΡΡΠΎ ΠΏΠ°ΠΊΡΠ΅ΡΡΡ/ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ/β¦ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ». ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ°ΠΌΠΎΠ³ΠΎ pyqtdeploy Π½ΡΠΆΠ½Ρ Python 3.5+ ΠΈ PyQt5. ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ (Π·Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΡΠΌΠΈ ΡΡΠ΄Π° ΠΈ ΡΡΠ΄Π°):
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° pyqtdeploy
ΠΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΡΠ΅, Ρ Π½Π°Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Python 3.5+ ΠΈ PyQt5:
Π‘Π±ΠΎΡΠΊΠ° Π½Π°ΡΠ΅Π³ΠΎ exe’ΡΠ½ΠΈΠΊΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠ°ΠΏΠΎΠ²:
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠΎΠ·ΡΠΌΠ΅ΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ: main.py β «ΡΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π°» Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ mainwindow.py β Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅Ρ ΠΎΠΊΠΎΡΠ΅ΡΠΊΠΎ Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ ΠΈ Π±Π΅ΡΠ΅Ρ ΠΈΠ· resources ΠΈΠΊΠΎΠ½ΠΊΡ icon.png ΠΈ mainwindow.ui, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Qt Designer. ΠΠΌΠ΅ΡΡΠΈΠ΅ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π²Π΅ΡΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΠΏΡΠΎΡΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π²Π΅ΡΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡ ΠΏΠΎ Ρ ΠΎΠ΄Ρ ΠΏΠΎΠ²Π΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ:
ΠΠ±Π·ΠΎΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² sysroot (Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ)
ΠΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ ΡΠ°Π½Π΅Π΅, Π½Π° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ°ΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΠ΅ΠΌ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΠ°Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° sysroot.json (Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°Π·Π²Π°ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Ρ ΠΎΡΠΈΡΠ΅ ΠΈ ΡΠΊΠ°Π·Π°ΡΡ Π·Π°ΡΠ΅ΠΌ ΠΏΡΡΡ ΠΊ Π½Π΅ΠΌΡ). ΠΠ½ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π±Π»ΠΎΠΊΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ±ΠΎΡΠΊΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° (Python, Qt ΠΈ Ρ.Π΄.). Π pyqtdeploy ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ API, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π²Π°ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΠΏΠ»Π°Π³ΠΈΠ½, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠ±ΠΎΡΠΊΠΎΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π²Π°ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ/ΠΌΠΎΠ΄ΡΠ»Ρ/whatever, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΠ΅ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ pyqtdeploy. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ±Π΅ΠΆΠΈΠΌΡΡ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌ ΠΈ ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ (ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ):
openssl (Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ) β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ). ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ Π΄Π°Π½Π½ΡΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ Π² sysroot.json, Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
zlib (Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ) β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² (Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°Π½, ΠΏΠΎ ΠΈΠ΄Π΅Π΅, Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΡ, ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅) (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ):
qt5 (ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ) β ΡΡΡ ΠΏΠΎΠ½ΡΡΠ½ΠΎ (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ):
python (ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ) β ΡΡΡ ΡΠΎΠΆΠ΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ):
sip (ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ) β ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Python-bindings Π΄Π»Ρ C/C++ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΡΡ ΠΈ ΡΡΡ):
pyqt5 (ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ) β ΡΡΡ ΡΠΎΠΆΠ΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ):
pyqt3D, pyqtchart, pyqtdatavisualization, pyqtpurchasing, qscintilla (Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅) β Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π½Π΅ Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² ΡΠΎΡΡΠ°Π² PyQt. ΠΠΌΠ΅ΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ source β ΠΈΠΌΡ Π°ΡΡ ΠΈΠ²Π° Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠ°ΠΌΠΈ.
Π‘ΡΠΎΠΈΡ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠΎΠ³ΡΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ. Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ sysroot Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. Π― ΠΏΠΎΡΡΠ°ΡΠ°Π»ΡΡ Π·Π΄Π΅ΡΡ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΈ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π΄Π»Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ sysroot
ΠΠ°Π²Π°ΠΉΡΠ΅ Π²Π·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° ΠΈΡΠΎΠ³ΠΎΠ²ΡΠΉ sysroot.json Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
Π§ΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΡ ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌ? ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ssl, pyqt3D ΠΈ ΠΏΡΠΎΡΠΈΠ΅). ΠΠΎ-Π²ΡΠΎΡΡΡ , ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π½Π°Ρ exe’ΡΠ½ΠΈΠΊ ΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ linux (Π° ΡΠΎΡΠ½Π΅Π΅, linux-64; Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ).
Π pyqt5 ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ QtCore, QtGui, QtWidgets.
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΡΠ±ΠΎΡΠΊΠ΅ sysroot, Π½Π΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ ΡΠΊΠ°ΡΠ°ΡΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ: zlib, Qt5, Python, sip, PyQt5 ΠΈ ΠΊΠ»Π°Π΄Π΅ΠΌ ΠΈΡ Π² ΠΏΠ°ΠΏΠΎΡΠΊΡ Ρ sysroot.json (ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π»ΡΠ±ΡΡ Π΄ΡΡΠ³ΡΡ, ΡΠΊΠ°Π·Π°Π² ΠΏΠΎΡΠΎΠΌ ΠΏΡΡΡ ΠΊ Π½Π΅ΠΉ). ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ±ΠΎΡΠΊΡ:
ΠΠ°Π½Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠΌΠ΅Π΅Ρ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π·Π΄Π΅ΡΡ.
ΠΡ ΠΈ Π·Π°ΠΏΠ°ΡΠΈΡΠ΅ΡΡ ΠΏΠΎΠΏΠΊΠΎΡΠ½ΠΎΠΌ, ΠΈΠ±ΠΎ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΡΡΡ Π½Π΅ΠΌΠ°Π»ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ.
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ «ΠΏΡΠΎΠ΅ΠΊΡΠ½ΡΠΉ» ΡΠ°ΠΉΠ» (Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ)
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π½Π°Ρ Π²ΡΠ΅ ΡΠ΄Π°ΡΠ½ΠΎ ΡΠΎΠ±ΡΠ°Π»ΠΎΡΡ, ΠΏΡΠΈΡΡΡΠΏΠ°Π΅ΠΌ ΠΊ Π²ΡΠ±ΠΎΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π·Π°ΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ Π² exe’ΡΠ½ΠΈΠΊ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² pyqtdeploy Π΅ΡΡΡ ΡΠ΄ΠΎΠ±Π½Π°Ρ ΡΡΠΈΠ»ΠΈΡΠ° Ρ GUI. ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ (ΠΈΠΌΡ .pdy ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΠ±ΡΠΌ):
Application Source. Π ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ:
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ: Π»ΡΠ±ΠΎΠΉ ΡΠ°ΠΉΠ» Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ .py Π±ΡΠ΄Π΅Ρ «Π·Π°ΠΌΠΎΡΠΎΠΆΠ΅Π½» (Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄) β Π² ΡΡΠ΄Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠΌ.
qmake. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² ΡΠ±ΠΎΡΠΊΠ΅ ΡΡΠ°ΡΡΠ²ΡΠ΅Ρ qmake, Π·Π΄Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄Π»Ρ Π½Π΅Π³ΠΎ (Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»);
PyQt Modules. ΠΠ° ΡΡΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌ Π²ΡΠ΅ PyQt-ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΡΠ²Π½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π² Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΡΠ»ΠΈ ΠΎΠ½ΠΈ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΡΠ΅ Π²ΡΠ΄Π΅Π»ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ QtCore, QtGui, QtWidgets, uic; sip ΠΏΠΎΠ΄Ρ
Π²Π°ΡΠΈΠ»ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΎΠΌ.
ΠΡΠ»ΠΈ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ PyQt, Π° Π½Π΅ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΅Π³ΠΎ ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌ (ΡΠ°ΠΊΠΎΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π½Π΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΡΡ).
Standard Library. ΠΠ΄Π΅ΡΡ ΡΠΎΡ ΠΆΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΡΡΠΎ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠ½ΠΊΡΠ΅, ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠ²Π½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΡΠ°Π²ΠΈΠΌ Π³Π°Π»ΠΊΡ. ΠΡΠ»ΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΌ Π½Π°ΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ (ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎΠΌΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ) Π½ΡΠΆΠ½Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΎΠ½ΠΈ Π²ΡΠ΄Π΅Π»ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΎΠΌ (ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΠΊΠΈ).
Python ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ΄ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ/ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ssl), ΠΊΠΎΡΠΎΡΡΠΌ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π½ΡΠΆΠ½Ρ Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΈΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ, ΡΠΎ ΠΌΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΡΡΠΎ Π΄Π΅Π»ΠΎ ΡΠΏΡΠ°Π²Π°. Π INCLUDEPATH ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΏΡΡΡ ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΌ ΡΠ°ΠΉΠ»Π°ΠΌ (headers), Π² LIBS β ΠΏΡΡΡ ΠΊ ΡΡΠΎΠΉ Π»ΠΈΠ±Π΅ (ΠΌΠ½ΠΎΠΉ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ, ΡΠ°ΠΊ ΡΡΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΌΠΎΡΡΠΈΠΌ Π² Π΄ΠΎΠΊΠ°Ρ ).
Other Packages. ΠΠ° ΡΡΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π½Π°ΠΌ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ ΠΈΠ· pypi). ΠΠΎΠ΄Ρ ΠΎΠ΄ ΡΠΎΡ ΠΆΠ΅, ΡΡΠΎ ΠΈ Π² Application source: ΠΊΠ»ΠΈΠΊΠ°Π΅ΠΌ Π΄Π²Π°ΠΆΠ΄Ρ Π½Π° ΠΏΡΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΠ°ΠΏΠΊΡ (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, site-packages ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ virtual environment), ΠΆΠΌΠ΅ΠΌ Scan ΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π½ΡΠΆΠ½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ/ΠΌΠΎΠ΄ΡΠ»ΠΈ (Ρ Π½Π°Ρ ΡΡΠΎ PIL).
Other Extension Modules. Π’ΡΡ ΠΌΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½Π° C, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΠΈΠΌ Π‘Π’ΠΠ’ΠΠ§ΠΠ‘ΠΠ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ ΠΊ exe’ΡΠ½ΠΈΠΊΡ (ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅; ΡΠ΅, ΡΡΠΎ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΌΠΈ).
Π‘ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ Ρ Π½Π΅ ΡΠ°Π·Π±ΠΈΡΠ°Π»ΡΡ, Π½ΠΎ ΡΠΎΠ²Π΅ΡΡΡ ΠΏΠΎΡΠΈΡΠ°ΡΡ, Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΏΡΠΎ ΡΡΡ Π²ΠΊΠ»Π°Π΄ΠΊΡ Π² Π΄ΠΎΠΊΠ°Ρ , Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΠΏΡΠΎ qmake (ΡΠ°ΠΌ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠΏΠΈΡΠ°Π½Ρ ΠΎΠΏΡΠΈΠΈ, ΡΠ΅ΠΌ Π² pyqt’ΡΠ½ΡΡ Π΄ΠΎΠΊΠ°Ρ ).
Locations. Π’ΡΡ ΡΠΎΠΆΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π½Π΅ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΡΡ, Π·Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΡΡΠ΅ΠΉ ΡΡΠ΄Π°. ΠΡΠ»ΠΈ Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ΠΉ (ΡΠΎΠ±ΡΠ°Π½Π½ΡΠΉ sysroot Π»Π΅ΠΆΠΈΡ ΡΡΡ ΠΆΠ΅, ΡΡΠ΄ΠΎΠΌ Ρ main.pdy), ΡΡΡ ΠΌΠ΅Π½ΡΡΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ.
Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ exe’ΡΠ½ΠΈΠΊ (Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ)
ΠΠ°ΠΊΠΎΠ½Π΅Ρ-ΡΠ°ΠΊΠΈ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π½Π°Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»:
ΠΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ, Π²ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ±ΡΠ°ΡΡΡΡ, Π½Π° Π΄Π΅Π»Π΅ β Π΄ΠΎΠΊΠΈ ΠΈ Π³ΡΠ³Π» Π²Π°ΠΌ Π² ΠΏΠΎΠΌΠΎΡΡ.
ΠΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΡΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ #1 β ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, «Π·Π°ΠΌΠΎΡΠΎΠΆΠ΅Π½ΠΎ» ΠΎΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π·Π°ΠΏΡΡΠ΅Π½Π° Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΊΠ°ΠΊ Π΅ΡΡΡ ΠΈΠ»ΠΈ ΠΈΠ· ΡΠΎΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ exe’ΡΠ½ΠΈΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΡ ΠΆΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΡΡΠΎ ΠΈ Π² PyInstaller:
ΠΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΡΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ #2 β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² (ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΈΠΊΠΎΠ½ΠΊΠΈ ΠΈ ΠΏΡ.)
Π£ Qt ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ «ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ΅ΡΡΡΡΠΎΠ²», ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ rcc ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² exe’ΡΠ½ΠΈΠΊ. ΠΠ°Π»Π΅Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΡΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΌΡ ΡΠ΅ΡΡΡΡΡ. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΠ°ΠΉΠ» Ρ ΠΈΠΊΠΎΠ½ΠΊΠΎΠΉ icon.png ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π² src/resources/images, ΡΠΎΠ³Π΄Π° ΠΏΡΡΡ Π² «ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ²» Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ β :/src/resources/images/icon.png. ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Π½ΠΈΡΠ΅Π³ΠΎ Ρ ΠΈΡΡΠΎΠ³ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΡΠ°ΠΊΠΈΠΌ ΠΏΡΡΠ΅ΠΌ Π΅ΡΡΡ ΠΎΠ΄Π½Π° Π·Π°ΡΠ°Π΄Π° β Π΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Qt’ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. Π’.Π΅. Π΅ΡΠ»ΠΈ Π²Ρ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ Ρ ΡΠ΅Π±Ρ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π² Π΄ΡΡ Π΅:
ΠΡΠ΅ Π±ΡΠ΄Π΅Ρ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠΎ Π΅ΡΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ:
ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΡΠΉΠ΄Π΅Ρ, ΠΈΠ±ΠΎ open Π±ΡΠ΄Π΅Ρ ΠΏΡΡΠ°ΡΡΡΡ Π½Π°ΠΉΡΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΡΡ Π² Π²Π°ΡΠ΅ΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈ, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ.
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΈΡΠ°ΡΡ Π·Π°ΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Qt (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ, ΠΊΠ°ΠΊ ΠΈ Ρ, ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ GUI Ρ ΠΏΠΎΠΌΠΎΡΡΡ Qt Designer ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠ°ΠΉΠ» .ui, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΠΎΠΌ Π½Π°Π΄ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ loadUi ), Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ°ΠΊ-ΡΠΎ ΡΠ°ΠΊ:
ΠΡΠΎΠ³ΠΈ
Π‘ΡΠΎΠΈΡ Π»ΠΈ ΡΠ°ΠΊ ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°ΠΌΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ΅Π½ exe’ΡΠ½ΠΈΠΊ, ΠΈ ΡΡΠ°ΡΡΠ΅ Π΄ΠΎΠ±ΡΡΠ΅ Π΄Π΅Π΄ΠΎΠ²ΡΠΊΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Π°ΠΌ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ? ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ PyQt, ΡΠΎ, Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΠΎΡΠ½ΠΎ Π½Π΅ ΡΡΠΎΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π±ΠΎΠ»Π΅Π΅ Π΄ΡΡΠΆΠ΅Π»ΡΠ±Π½ΠΎΠ΅ (ΡΠΎΡ ΠΆΠ΅ PyInstaller). ΠΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ Π²ΡΠΆΠ°ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ ΡΠΎΠΊΠΎΠ² ΠΈΠ· Π²Π°ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π° β Π΄Π΅ΡΠ·Π°ΠΉΡΠ΅. Π ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΡΠ΅ΡΠ΅ ΠΌΠ½Π΅ ΡΠ°ΠΊΠΈ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° Π΄ΠΎ
35 ΠΠ), ΡΡΠΎ Π²ΡΠ΅-ΡΠ°Π²Π½ΠΎ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ.
ΠΠΎΠ³Π΄Π° Ρ Π½Π°Ρ ΡΠΎΠ±ΡΠ°Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°Ρ Qt ΠΈ PyQt, Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π° ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π΅ exe’ΡΠ½ΠΈΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ PyInstaller ΠΈΠ»ΠΈ cx_Freeze ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΠ°Π·ΠΌΠ΅Ρ, Π½ΠΎ ΡΡΠΎ, ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ, ΡΠΆΠ΅ Π΄ΡΡΠ³Π°Ρ ΠΈΡΡΠΎΡΠΈΡ.
ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ exe ΡΠ°ΠΉΠ» Π΄Π»Ρ Python ΠΊΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ PyInstaller
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° PyInstaller
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° PyInstaller Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python.
ΠΠΎΡ ΡΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π²Π΅ΡΡΠΈΡ PyInstaller.
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ PyInstaller Π²Π΅ΡΡΠΈΠΈ 4.2.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ exe ΡΠ°ΠΉΠ»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ PyInstaller
PyInstaller ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΠΊΠ΅Ρ Python-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΅ΠΌΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠΎΠ·ΡΠΌΠ΅ΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΡΠΊΡΠΈΠΏΡ Π½Π° Python c Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ simple.py, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ». Π ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π²Π²Π΅Π΄ΠΈΡΠ΅:
Python ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠΎΡ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ°ΠΉΠ»Π°.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ exe-ΡΠ°ΠΉΠ»ΠΎΠΌ
ΠΡΡΡ CSV-ΡΠ°ΠΉΠ» netflix_titles.csv, ΠΈ Python-script, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² Π½Π΅ΠΌ. Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π² Π±Π°Π½Π΄Π» Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ. Π€Π°ΠΉΠ» Python-ΡΠΊΡΠΈΠΏΡΠ° Π½Π°Π·ΠΎΠ²Π΅ΠΌ ΠΏΡΠΎΡΡΠΎ simple1.py.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π² ΠΏΠ°ΠΏΠΊΠ΅.
ΠΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΠ°ΠΉΠ» ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΏΠ°ΠΏΠΊΡ DIST Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ.
Π’Π°ΠΊΠΆΠ΅, ΠΎΡΠΊΡΡΠ² spec-ΡΠ°ΠΉΠ», ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ°Π·Π΄Π΅Π» datas, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΉΠ» netflix_titles.csv ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π² ΡΠ΅ΠΊΡΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ onefile
Π‘ΠΊΡΠΈΠΏΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΏΠ°ΠΏΠΊΠΈ TEMP ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ Π΄Π°Π½Π½ΡΠΌΠΈ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ exe-ΡΠ°ΠΉΠ» Ρ ΠΏΠΎΠΌΠΎΡΡΡ onefile ΠΈ add-data.
ΠΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΉΠ» simple1.exe ΠΏΠΎΡΠ²ΠΈΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ DIST.
ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π½Π° ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΡΠΎΠ» ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ Ρ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ΠΌ ΡΠ°ΠΉΠ»Π°.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Hidden Imports
ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ ΡΡΠ΅Π±ΡΡΡΡΡ Π²ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½Ρ Python-ΡΠΊΡΠΈΠΏΡΡ. ΠΠ½ΠΎΠ³Π΄Π° PyInstaller ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠΌΠΏΠΎΡΡΡ ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠΎΡΡΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΡ ImportError: No module named β¦
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² hidden-import.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ os, Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π²ΠΎΡ ΡΠ°ΠΊ:
Π€Π°ΠΉΠ» spec
Π€Π°ΠΉΠ» spec β ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ PyInstaller ΡΠΎΠ·Π΄Π°Π΅Ρ, ΡΡΠΎΠ±Ρ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠΊΡΠΈΠΏΡΠ° Python Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅.
PyInstaller ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ Π²ΡΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π΄Π»Ρ Π½Π΅Π³ΠΎ.
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠ· Π½ΠΈΠΆΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ°ΠΉΠ» ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ:
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΡΡ ΡΠΊΡΠΈΠΏΡ simpleModel.py, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ TensorFlow ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½ΠΎΠΌΠ΅Ρ Π²Π΅ΡΡΠΈΠΈ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ PyInstaller:
ΠΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
ΠΡΠΏΡΠ°Π²ΠΈΠΌ Π΅Π΅, ΠΎΠ±Π½ΠΎΠ²ΠΈΠ² ΡΠ°ΠΉΠ» spec. ΠΠ΄Π½ΠΎ ΠΈΠ· ΡΠ΅ΡΠ΅Π½ΠΈΠΉ β ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» spec.
ΠΠΎΠΌΠ°Π½Π΄Π° pyi-makespec ΡΠΎΠ·Π΄Π°Π΅Ρ spec-ΡΠ°ΠΉΠ» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. Π€Π°ΠΉΠ» simpleModel.spec ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ.
ΠΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΠ»ΠΈ onedir, ΡΠΎ Π²ΠΌΠ΅ΡΡΠ΅ Ρ exe-ΡΠ°Π·Π΄Π΅Π»ΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈ ΡΠ°Π·Π΄Π΅Π» collect.
ΠΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ simpleModel.spec ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Ρ ΡΠΊΠΎΠ².
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ ΡΠΊΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΈΡ Π² hidden imports ΠΈ ΡΠ°Π·Π΄Π΅Π» Π΄Π°Π½Π½ΡΡ .
Π€Π°ΠΉΠ»Ρ Ρ ΡΠΊΠΎΠ² ΡΠ°ΡΡΠΈΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ PyInstaller ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠ±ΡΡΠ½ΠΎ ΠΏΠ°ΠΊΠ΅ΡΡ Python ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠ° ΡΠ²ΠΎΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π½ΠΎ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ TensorFlow, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. PyInstaller Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈΠ· PyInstaller.utils.hooks ΠΈ ΡΠΎΠ±ΡΠ°ΡΡ Π²ΡΠ΅ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° simpleModel.spec.
Π‘ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π½Π° ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΡΠΎΠ» ΠΈ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π²Π΅ΡΡΠΈΡ TensorFlow.
ΠΡΠ²ΠΎΠ΄:
PyInstaller ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΡΡΡΡ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ· Python-ΡΠΊΡΠΈΠΏΡΠΎΠ²:
ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Python
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Python
ΠΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β ΡΡΠΎ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅. Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Ρ ΡΠΆΠ΅ ΠΏΡΡΠ°Π»ΠΈΡΡ ΠΈΡ ΡΠΎΠ·Π΄Π°ΡΡ. ΠΠ»ΠΈ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π΄ΡΠΌΠ°Π»ΠΈ ΠΎΠ± ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ.
ΠΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β ΡΡΠΎ ΠΎΠ΄Π½ΠΎ, Π° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π΅Π³ΠΎ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, PyPI) β ΡΠΎΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠ΅. Π₯ΠΎΡΡ Π½ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ΅, Π½ΠΈ Π²ΡΠΎΡΠΎΠ΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ-ΡΠΎ Π·Π°ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΡΡΡΠ΄Π½ΡΠΌ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΡΡΠΎΠΉ CLI Π½Π° Python ΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² PyPI.
ΠΠ°ΡΠ°Π»ΠΎ
ΠΠ΅ ΡΠ°ΠΊ Π΄Π°Π²Π½ΠΎ Ρ Π·Π°Π½ΡΠ»ΡΡ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ open-source ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ½ΡΠ», ΡΡΠΎ Ρ ΠΎΡΡ ΠΈΠΌΠ΅ΡΡ Π² Π°ΡΡΠ΅Π½Π°Π»Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠ³ Π±Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ open-source ΠΊΠΎΠ΄Π° ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠ±Π»ΠΈΠΊΡΡΡΡΡ Π² ΠΎΡΠΊΡΡΡΡΡ Π±Π°Π·Π°Ρ Π΄Π°Π½Π½ΡΡ . ΠΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½Π° ΡΠ°ΠΊΠΈΡ ΡΠ°ΠΉΡΠ°Ρ , ΠΊΠ°ΠΊ CVE, NVD, WhiteSource Vuln ΠΈ Ρ.Π΄.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΉ ΡΠΊΡΠ΅ΠΉΠΏΠ΅Ρ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ Ρ ΡΠ°ΠΉΡΠ° CVE, ΠΎΠ±Π΅ΡΠ½Π΅ΠΌ Π΅Π³ΠΎ Π² ΠΏΡΠΎΡΡΠΎΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ Π½Π° PyPI.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ. Π― ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄Ρ. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ΅Π΄Π° Π½Π°ΡΡΡΠΎΠ΅Π½Π° ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π½Π°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠ°ΠΏΠΊΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ:
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΎΡΡ, ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΠΊΠΎΠ΄Π°. ΠΡ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΠΎΡ ΠΎΠΆΡΡ ΡΡΡΡΠΊΡΡΡΡ:
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅Π±-ΡΠΊΡΠ΅ΠΉΠΏΠ΅ΡΠ°
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΡΠΊΠ°ΡΡ ΠΈ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π½Π° ΡΠ°ΠΉΡΠ΅ CVE, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²Π΅Π±-ΡΠΊΡΠ΅ΠΉΠΏΠ΅Ρ. ΠΠ½ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΌ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΡ . ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΊΡΠ΅ΠΉΠΏΠ΅Ρ Π² Requests ΠΈ BeautifulSoup. ΠΠΎΡ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡ Π½Π°Ρ ΡΠΊΡΠ΅ΠΉΠΏΠ΅Ρ:
1. ΠΈΡΠΊΠ°ΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ;
2. ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎ Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΡ Π½Π° CVE.
ΠΠΎΠΈΡΠΊ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· URL ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Python:
ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠΈΡΠΌΠΎΡΡΠΈΡΠ΅ΡΡ ΠΊ DOM-ΡΡΡΡΠΊΡΡΡΠ΅ Π²ΡΡΠ΅, ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΡΠ°Π±Π»ΠΈΡΡ, Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΏΠΎΠ΄ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ. Π’Π°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΠΎΡΡΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ:
1. ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡ Π² SEARCH_URL Ρ ΠΏΠΎΠΌΠΎΡΡΡ Requests ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ DOM-ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅;
ΠΡΠΎΡΠΌΠΎΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΡ
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ, Π½ΡΠΆΠ½ΠΎ Π²Π·ΡΡΡ Π΅Π΅ CVE-ID ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠΎ ΡΡΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-ID.
ΠΡΠΊΡΠΎΠΉΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈ ΠΈΡΡΠ»Π΅Π΄ΡΠΉΡΠ΅ DOM-ΡΡΡΡΠΊΡΡΡΡ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠ°Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ β ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Click.
Click β ΡΡΠΎ Python-ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΡΠ°ΡΠΈΠ²ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π° ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. ΠΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π»ΡΡΡΠΈΡ Python-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ CLI, ΠΈ Ρ Π½ΠΈΠΌ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
Click ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ β ΠΎΡ ΡΠ°ΠΌΡΡ ΠΏΡΠΎΡΡΡΡ Π΄ΠΎ Π½Π°Π²ΠΎΡΠΎΡΠ΅Π½Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Heroku).
Π Π½Π°ΡΠ΅ΠΌ CLI ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
1. ΠΏΠΎΠΈΡΠΊ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ;
2. ΠΏΡΠΎΡΠΌΠΎΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ.
Π ΠΏΠ°ΠΏΠΊΠ΅ cver ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ°ΠΉΠ» ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ __main__.py ΠΈ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ:
ΠΠΎΠΈΡΠΊ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ
ΠΠ΄Π΅ΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° search ΠΈΠ· Π²Π΅Π±-ΡΠΊΡΠ΅ΠΉΠΏΠ΅ΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΅ΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ keyword ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΊΠ°ΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ Ρ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ:
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΡΠΎΡΠΌΠΎΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΠΎΡΠΎΠ²ΠΎ! ΠΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎ ΠΏΠΎΠΈΡΠΊΡ Ρ CVE.
ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° PyPI
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡ Π² Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π½Π° PyPI Π² ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ΅.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ°
ΠΡΠΊΡΠΎΠΉΡΠ΅ setup.py Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π² Π½Π°ΡΠ°Π»ΠΎ ΡΠ°ΠΉΠ»Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ ΠΌΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π»ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° README.md Π² ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠ»ΠΈ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈΠ· requirements.txt ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠ°Ρ ΡΠ°ΠΉΠ» requirements.txt Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ:
Π ΠΊΠΎΠ΄Π΅ Π²ΡΡΠ΅ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ. ΠΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΈΠ· Π½ΠΈΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ.
1. name β Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π½Π° PyPI;
2. version β ΡΠ΅ΠΊΡΡΠ°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ°;
ΠΡΠΈΠΌΠ΅Ρ Ρ ΠΎΡΠΎΡΠΎ ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ README.md :
ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π½Π° PyPI
Π’Π΅ΠΏΠ΅ΡΡ Π²Π°Ρ ΠΏΠ°ΠΊΠ΅Ρ Π³ΠΎΡΠΎΠ² ΠΊ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° PyPI. ΠΡΠ΅ ΡΠ°Π· ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, Π΅ΡΡΡ Π»ΠΈ Ρ Π²Π°Ρ ΡΠΆΠ΅ Π°ΠΊΠΊΠ°ΡΠ½Ρ Π½Π° PyPI. ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊ Π½Π΅ΠΌΡ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ Π°ΠΊΠΊΠ°ΡΠ½Ρ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ PyPI. ΠΡΠΎΡ Π°ΠΊΠΊΠ°ΡΠ½Ρ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ ΠΈΡ Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅
Python-ΠΏΠ°ΠΊΠ΅ΡΡ, ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° PyPI, Π½Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ Β«Π³ΠΎΠ»ΠΎΠ³ΠΎΒ» ΠΊΠΎΠ΄Π°. ΠΠ½ΠΈ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Π² Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Ρ. Π‘Π°ΠΌΡΠΌΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌΠΈ ΡΠΎΡΠΌΠ°ΡΠ°ΠΌΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ² Π² Python ΡΠ²Π»ΡΡΡΡΡ Wheels ΠΈ Source Archives.
Wheels β ΡΡΠΎ zip-Π°ΡΡ ΠΈΠ² Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π³ΠΎΡΠΎΠ²ΡΠΌΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ. Source Archives ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡΠ΅ Π² tar-Π°ΡΡ ΠΈΠ².
ΠΠ»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅:
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ:
ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ PyPI Π½ΡΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ±ΠΎΡΠΊΡ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΡΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ Π°ΡΡ ΠΈΠ²Ρ Wheels ΠΈ Source Archives.
ΠΠΎΠ΄ Π½ΠΈΠΆΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π΄Π²Π° ΡΠ°ΠΉΠ»Π° Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ dist :
ΠΠ°ΡΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Twine. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΏΠ°ΠΊΠ΅Ρ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ PyPI:
ΠΠ°ΡΠ΅ΠΌ Ρ Π²Π°Ρ ΡΠΏΡΠΎΡΡΡ Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ.
ΠΡΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ, ΡΠΎ ΠΎΠ½ Π³ΠΎΡΠΎΠ² ΠΊ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅. ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π΄Π΅ΡΡ.
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΠ· TestPyPI Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
Π ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΡΡΠ΅Π΄Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅.
ΠΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π² Π²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΠ΅ ΠΊ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅:
Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ. ΠΠΎΡ ΠΈ Π²ΡΠ΅!
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΡΠ΅Π·:
ΠΠΎΠ·Π΄ΡΠ°Π²Π»ΡΡ! ΠΠ°Ρ ΠΏΠ°ΠΊΠ΅Ρ Π±ΡΠ» ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π½Π° PyPI. ΠΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π΄Π΅ΡΡ!
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎ ΠΎΠ±ΡΡΡΠ½ΠΈΠ» ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Python.