[Pkg-privacy-commits] [onionshare] 32/66: Successfully builds a .exe with Python3/Qt5. Switched from pyinstaller to py2exe. (#261)
Ulrike Uhlig
u-guest at moszumanska.debian.org
Wed Apr 13 22:17:49 UTC 2016
This is an automated email from the git hooks/post-receive script.
u-guest pushed a commit to branch master
in repository onionshare.
commit d438e25b9b6e1993a8839ef811b2e2533c17bf40
Author: Micah Lee <micah at micahflee.com>
Date: Mon Feb 15 22:16:09 2016 -0800
Successfully builds a .exe with Python3/Qt5. Switched from pyinstaller to py2exe. (#261)
---
BUILD.md | 6 +-
install/build_exe.bat | 6 +-
install/onionshare-win.spec | 46 ------
install/onionshare.nsi | 171 ++++++---------------
.../onionshare.py} | 10 +-
setup.py | 25 +++
6 files changed, 91 insertions(+), 173 deletions(-)
diff --git a/BUILD.md b/BUILD.md
index 1055ac7..088392b 100644
--- a/BUILD.md
+++ b/BUILD.md
@@ -104,7 +104,7 @@ These instructions include adding folders to the path in Windows. To do this, go
First, download and install the 32-bit (x86) version of Python 3.4.x from https://www.python.org/downloads/windows/. You need 3.4 instead of 3.5 because PyQt5 was built with 3.4. Add `C:\Python34` and `C:\Python34\Scripts` to the path.
-Open a command prompt and install some dependencies with pip: `pip install flask stem pyinstaller`
+Open a command prompt and install some dependencies with pip: `pip install flask stem py2exe`
Download and install Qt5 from https://www.qt.io/download-open-source/. I downloaded `qt-unified-windows-x86-2.0.2-2-online.exe`. There's no need to login to a Qt account during installation. Make sure you install the latest Qt 5.x.
@@ -133,12 +133,12 @@ If you want to sign binaries with Authenticode:
### To make a .exe:
-* Open a command prompt, cd into the onionshare directory, and type: `pyinstaller -y install\onionshare-win.spec`. Inside the `dist` folder there will be a folder called `onionshare` with `onionshare.exe` in it.
+* Open a command prompt, cd into the onionshare directory, and type: `python setup.py py2exe`. `onionshare.exe` and all of its supporting files will get created inside the `dist` folder.
### To build the installer:
Note that you must have a codesigning certificate installed in order to use the `install\build_exe.bat` script, because it codesigns `onionshare.exe`, `uninstall.exe`, and `OnionShare_Setup.exe`.
-s
+
Open a command prompt, cd to the onionshare directory, and type: `install\build_exe.bat`
This will prompt you to codesign three binaries and execute one unsigned binary. When you're done clicking through everything you will have `dist\OnionShare_Setup.exe`.
diff --git a/install/build_exe.bat b/install/build_exe.bat
index 869d734..b68566f 100644
--- a/install/build_exe.bat
+++ b/install/build_exe.bat
@@ -1,8 +1,8 @@
-REM use pyinstaller to builder a folder with onionshare.exe
-pyinstaller -y install\onionshare-win.spec
+REM use py2exe to builder a folder with onionshare.exe
+python setup.py py2exe
REM sign onionshare.exe
-signtool.exe sign /v /d "OnionShare" /a /tr http://timestamp.globalsign.com/scripts/timstamp.dll /fd sha256 dist\onionshare\onionshare.exe
+signtool.exe sign /v /d "OnionShare" /a /tr http://timestamp.globalsign.com/scripts/timstamp.dll /fd sha256 dist\onionshare.exe
REM build an installer, dist\OnionShare_Setup.exe
makensis.exe install\onionshare.nsi
diff --git a/install/onionshare-win.spec b/install/onionshare-win.spec
deleted file mode 100644
index 332bee2..0000000
--- a/install/onionshare-win.spec
+++ /dev/null
@@ -1,46 +0,0 @@
-# -*- mode: python -*-
-a = Analysis(['onionshare-launcher.py'],
- #hiddenimports=['onionshare', 'onionshare_gui'],
- #excludes=['_tkinter'],
- hookspath=None,
- runtime_hooks=None)
-a.datas += [
- ('images/logo.png', 'images/logo.png', 'DATA'),
- ('images/drop_files.png', 'images/drop_files.png', 'DATA'),
- ('images/server_stopped.png', 'images/server_stopped.png', 'DATA'),
- ('images/server_started.png', 'images/server_started.png', 'DATA'),
- ('images/server_working.png', 'images/server_working.png', 'DATA'),
- ('locale/de.json', 'locale/de.json', 'DATA'),
- ('locale/en.json', 'locale/en.json', 'DATA'),
- ('locale/eo.json', 'locale/eo.json', 'DATA'),
- ('locale/es.json', 'locale/es.json', 'DATA'),
- ('locale/fi.json', 'locale/fi.json', 'DATA'),
- ('locale/fr.json', 'locale/fr.json', 'DATA'),
- ('locale/it.json', 'locale/it.json', 'DATA'),
- ('locale/nl.json', 'locale/nl.json', 'DATA'),
- ('locale/no.json', 'locale/no.json', 'DATA'),
- ('locale/pt.json', 'locale/pt.json', 'DATA'),
- ('locale/ru.json', 'locale/ru.json', 'DATA'),
- ('locale/tr.json', 'locale/tr.json', 'DATA'),
- ('version', 'version', 'DATA'),
-]
-pyz = PYZ(a.pure)
-exe = EXE(pyz,
- a.scripts,
- exclude_binaries=True,
- name='onionshare.exe',
- debug=False,
- strip=False,
- upx=True,
- icon='install/onionshare.ico',
- console=False)
-coll = COLLECT(exe,
- a.binaries,
- a.zipfiles,
- a.datas,
- Tree('onionshare', prefix='onionshare'),
- Tree('onionshare_gui', prefix='onionshare_gui'),
- [('LICENSE', 'LICENSE', 'DATA')],
- strip=False,
- upx=True,
- name='onionshare')
diff --git a/install/onionshare.nsi b/install/onionshare.nsi
index 547212f..a4c87b0 100644
--- a/install/onionshare.nsi
+++ b/install/onionshare.nsi
@@ -1,9 +1,9 @@
!define APPNAME "OnionShare"
-!define BINPATH "..\dist\onionshare"
+!define BINPATH "..\dist"
!define ABOUTURL "https:\\onionshare.org\"
# change these with each release
-!define INSTALLSIZE 31616
+!define INSTALLSIZE 60104
!define VERSIONMAJOR 0
!define VERSIONMINOR 8
!define VERSIONSTRING "0.8.1"
@@ -61,27 +61,13 @@ FunctionEnd
Section "install"
# application
SetOutPath "$INSTDIR"
- File "onionshare.ico"
File "${BINPATH}\onionshare.exe"
- File "${BINPATH}\license"
- SetOutPath "$INSTDIR\onionshare"
- File "${BINPATH}\onionshare\__init__.py"
- File "${BINPATH}\onionshare\404.html"
- File "${BINPATH}\onionshare\helpers.py"
- File "${BINPATH}\onionshare\hs.py"
- File "${BINPATH}\onionshare\index.html"
- File "${BINPATH}\onionshare\onionshare.py"
- File "${BINPATH}\onionshare\socks.py"
- File "${BINPATH}\onionshare\strings.py"
- File "${BINPATH}\onionshare\web.py"
- SetOutPath "$INSTDIR\onionshare_gui"
- File "${BINPATH}\onionshare_gui\__init__.py"
- File "${BINPATH}\onionshare_gui\common.py"
- File "${BINPATH}\onionshare_gui\downloads.py"
- File "${BINPATH}\onionshare_gui\file_selection.py"
- File "${BINPATH}\onionshare_gui\onionshare_gui.py"
- File "${BINPATH}\onionshare_gui\options.py"
- File "${BINPATH}\onionshare_gui\server_status.py"
+ File "${BINPATH}\license.txt"
+ File "${BINPATH}\version"
+ File "${BINPATH}\onionshare.ico"
+ SetOutPath "$INSTDIR\html"
+ File "${BINPATH}\html\404.html"
+ File "${BINPATH}\html\index.html"
SetOutPath "$INSTDIR\images"
File "${BINPATH}\images\logo.png"
File "${BINPATH}\images\drop_files.png"
@@ -103,54 +89,35 @@ Section "install"
File "${BINPATH}\locale\tr.json"
# dependencies
+ SetOutPath "$INSTDIR\platforms"
+ File "${BINPATH}\platforms\qwindows.dll"
SetOutPath $INSTDIR
+ File "${BINPATH}\_bz2.pyd"
File "${BINPATH}\_ctypes.pyd"
+ File "${BINPATH}\_decimal.pyd"
File "${BINPATH}\_hashlib.pyd"
+ File "${BINPATH}\_lzma.pyd"
+ File "${BINPATH}\_multiprocessing.pyd"
File "${BINPATH}\_socket.pyd"
File "${BINPATH}\_ssl.pyd"
- File "${BINPATH}\bz2.pyd"
- File "${BINPATH}\microsoft.vc90.crt.manifest"
- File "${BINPATH}\msvcm90.dll"
- File "${BINPATH}\msvcp90.dll"
- File "${BINPATH}\msvcr90.dll"
- File "${BINPATH}\onionshare.exe.manifest"
+ File "${BINPATH}\icudt53.dll"
+ File "${BINPATH}\icuin53.dll"
+ File "${BINPATH}\icuuc53.dll"
+ File "${BINPATH}\library.zip"
+ File "${BINPATH}\license.txt"
File "${BINPATH}\pyexpat.pyd"
- File "${BINPATH}\PyQt4.QtCore.pyd"
- File "${BINPATH}\PyQt4.QtGui.pyd"
- File "${BINPATH}\python27.dll"
- File "${BINPATH}\pywintypes27.dll"
- File "${BINPATH}\qtcore4.dll"
- File "${BINPATH}\qtgui4.dll"
- File "${BINPATH}\qtopengl4.dll"
- File "${BINPATH}\qtsvg4.dll"
- File "${BINPATH}\qtxml4.dll"
+ File "${BINPATH}\PyQt5.QtCore.pyd"
+ File "${BINPATH}\PyQt5.QtGui.pyd"
+ File "${BINPATH}\PyQt5.QtWidgets.pyd"
+ File "${BINPATH}\python34.dll"
+ File "${BINPATH}\pywintypes34.dll"
+ File "${BINPATH}\Qt5Core.dll"
+ File "${BINPATH}\Qt5Gui.dll"
+ File "${BINPATH}\Qt5Widgets.dll"
File "${BINPATH}\select.pyd"
File "${BINPATH}\sip.pyd"
File "${BINPATH}\unicodedata.pyd"
- File "${BINPATH}\win32api.pyd"
- File "${BINPATH}\win32pipe.pyd"
File "${BINPATH}\win32wnet.pyd"
- SetOutPath "$INSTDIR\qt4_plugins\accessible"
- File "${BINPATH}\qt4_plugins\accessible\qtaccessiblewidgets4.dll"
- SetOutPath "$INSTDIR\qt4_plugins\codecs"
- File "${BINPATH}\qt4_plugins\codecs\qcncodecs4.dll"
- File "${BINPATH}\qt4_plugins\codecs\qjpcodecs4.dll"
- File "${BINPATH}\qt4_plugins\codecs\qkrcodecs4.dll"
- File "${BINPATH}\qt4_plugins\codecs\qtwcodecs4.dll"
- SetOutPath "$INSTDIR\qt4_plugins\graphicssystems"
- File "${BINPATH}\qt4_plugins\graphicssystems\qglgraphicssystem4.dll"
- SetOutPath "$INSTDIR\qt4_plugins\iconengines"
- File "${BINPATH}\qt4_plugins\iconengines\qsvgicon4.dll"
- SetOutPath "$INSTDIR\qt4_plugins\imageformats"
- File "${BINPATH}\qt4_plugins\imageformats\qgif4.dll"
- File "${BINPATH}\qt4_plugins\imageformats\qico4.dll"
- File "${BINPATH}\qt4_plugins\imageformats\qjpeg4.dll"
- File "${BINPATH}\qt4_plugins\imageformats\qmng4.dll"
- File "${BINPATH}\qt4_plugins\imageformats\qsvg4.dll"
- File "${BINPATH}\qt4_plugins\imageformats\qtga4.dll"
- File "${BINPATH}\qt4_plugins\imageformats\qtiff4.dll"
- SetOutPath "$INSTDIR\include"
- File "${BINPATH}\Include\pyconfig.h"
# uninstaller
!ifndef INNER
@@ -195,25 +162,11 @@ FunctionEnd
# remove files
Delete "$INSTDIR\onionshare.exe"
- Delete "$INSTDIR\LICENSE"
+ Delete "$INSTDIR\license.txt"
+ Delete "$INSTDIR\version"
Delete "$INSTDIR\onionshare.ico"
- Delete "$INSTDIR\uninstall.exe"
- Delete "$INSTDIR\onionshare\__init__.py"
- Delete "$INSTDIR\onionshare\404.html"
- Delete "$INSTDIR\onionshare\helpers.py"
- Delete "$INSTDIR\onionshare\hs.py"
- Delete "$INSTDIR\onionshare\index.html"
- Delete "$INSTDIR\onionshare\onionshare.py"
- Delete "$INSTDIR\onionshare\socks.py"
- Delete "$INSTDIR\onionshare\strings.py"
- Delete "$INSTDIR\onionshare\web.py"
- Delete "$INSTDIR\onionshare_gui\__init__.py"
- Delete "$INSTDIR\onionshare_gui\common.py"
- Delete "$INSTDIR\onionshare_gui\downloads.py"
- Delete "$INSTDIR\onionshare_gui\file_selection.py"
- Delete "$INSTDIR\onionshare_gui\onionshare_gui.py"
- Delete "$INSTDIR\onionshare_gui\options.py"
- Delete "$INSTDIR\onionshare_gui\server_status.py"
+ Delete "$INSTDIR\html\404.html"
+ Delete "$INSTDIR\html\index.html"
Delete "$INSTDIR\images\logo.png"
Delete "$INSTDIR\images\drop_files.png"
Delete "$INSTDIR\images\server_stopped.png"
@@ -231,60 +184,38 @@ FunctionEnd
Delete "$INSTDIR\locale\pt.json"
Delete "$INSTDIR\locale\ru.json"
Delete "$INSTDIR\locale\tr.json"
- Delete "$INSTDIR\qt4_plugins\accessible\qtaccessiblewidgets4.dll"
- Delete "$INSTDIR\qt4_plugins\graphicssystems\qglgraphicssystem4.dll"
- Delete "$INSTDIR\qt4_plugins\iconengines\qsvgicon4.dll"
- Delete "$INSTDIR\qt4_plugins\codecs\qjpcodecs4.dll"
- Delete "$INSTDIR\qt4_plugins\codecs\qkrcodecs4.dll"
- Delete "$INSTDIR\qt4_plugins\codecs\qtwcodecs4.dll"
- Delete "$INSTDIR\qt4_plugins\codecs\qcncodecs4.dll"
- Delete "$INSTDIR\qt4_plugins\imageformats\qmng4.dll"
- Delete "$INSTDIR\qt4_plugins\imageformats\qico4.dll"
- Delete "$INSTDIR\qt4_plugins\imageformats\qgif4.dll"
- Delete "$INSTDIR\qt4_plugins\imageformats\qjpeg4.dll"
- Delete "$INSTDIR\qt4_plugins\imageformats\qsvg4.dll"
- Delete "$INSTDIR\qt4_plugins\imageformats\qtga4.dll"
- Delete "$INSTDIR\qt4_plugins\imageformats\qtiff4.dll"
- Delete "$INSTDIR\Include\pyconfig.h"
+ Delete "$INSTDIR\platforms\qwindows.dll"
+ Delete "$INSTDIR\_bz2.pyd"
Delete "$INSTDIR\_ctypes.pyd"
+ Delete "$INSTDIR\_decimal.pyd"
Delete "$INSTDIR\_hashlib.pyd"
+ Delete "$INSTDIR\_lzma.pyd"
+ Delete "$INSTDIR\_multiprocessing.pyd"
Delete "$INSTDIR\_socket.pyd"
Delete "$INSTDIR\_ssl.pyd"
- Delete "$INSTDIR\bz2.pyd"
- Delete "$INSTDIR\Microsoft.VC90.CRT.manifest"
- Delete "$INSTDIR\msvcm90.dll"
- Delete "$INSTDIR\msvcp90.dll"
- Delete "$INSTDIR\msvcr90.dll"
- Delete "$INSTDIR\onionshare.exe.manifest"
+ Delete "$INSTDIR\icudt53.dll"
+ Delete "$INSTDIR\icuin53.dll"
+ Delete "$INSTDIR\icuuc53.dll"
+ Delete "$INSTDIR\library.zip"
+ Delete "$INSTDIR\license.txt"
Delete "$INSTDIR\pyexpat.pyd"
- Delete "$INSTDIR\PyQt4.QtCore.pyd"
- Delete "$INSTDIR\PyQt4.QtGui.pyd"
- Delete "$INSTDIR\python27.dll"
- Delete "$INSTDIR\pywintypes27.dll"
- Delete "$INSTDIR\QtCore4.dll"
- Delete "$INSTDIR\QtGui4.dll"
- Delete "$INSTDIR\QtOpenGL4.dll"
- Delete "$INSTDIR\QtSvg4.dll"
- Delete "$INSTDIR\QtXml4.dll"
+ Delete "$INSTDIR\PyQt5.QtCore.pyd"
+ Delete "$INSTDIR\PyQt5.QtGui.pyd"
+ Delete "$INSTDIR\PyQt5.QtWidgets.pyd"
+ Delete "$INSTDIR\python34.dll"
+ Delete "$INSTDIR\pywintypes34.dll"
+ Delete "$INSTDIR\Qt5Core.dll"
+ Delete "$INSTDIR\Qt5Gui.dll"
+ Delete "$INSTDIR\Qt5Widgets.dll"
Delete "$INSTDIR\select.pyd"
Delete "$INSTDIR\sip.pyd"
Delete "$INSTDIR\unicodedata.pyd"
- Delete "$INSTDIR\win32api.pyd"
- Delete "$INSTDIR\win32pipe.pyd"
Delete "$INSTDIR\win32wnet.pyd"
- rmDir "$INSTDIR\onionshare"
- rmDir "$INSTDIR\onionshare_gui"
+ rmDir "$INSTDIR\html"
rmDir "$INSTDIR\images"
rmDir "$INSTDIR\locale"
- rmDir "$INSTDIR\Include"
- rmDir "$INSTDIR\qt4_plugins\accessible"
- rmDir "$INSTDIR\qt4_plugins\bearer"
- rmDir "$INSTDIR\qt4_plugins\codecs"
- rmDir "$INSTDIR\qt4_plugins\graphicssystems"
- rmDir "$INSTDIR\qt4_plugins\iconengines"
- rmDir "$INSTDIR\qt4_plugins\imageformats"
- rmDir "$INSTDIR\qt4_plugins"
+ rmDir "$INSTDIR\platforms"
rmDir "$INSTDIR"
# remove uninstaller information from the registry
diff --git a/install/onionshare-launcher.py b/install/windows_scripts/onionshare.py
similarity index 75%
rename from install/onionshare-launcher.py
rename to install/windows_scripts/onionshare.py
index 83c8e91..3880e1d 100644
--- a/install/onionshare-launcher.py
+++ b/install/windows_scripts/onionshare.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from __future__ import division
-import os, sys, subprocess, time, hashlib, platform, json, locale, socket
+import os, subprocess, time, hashlib, platform, json, locale, socket
import argparse, queue, inspect, base64, random, functools, logging, ctypes
import hmac, shutil
import stem, stem.control, flask
@@ -26,4 +26,12 @@ from PyQt5 import QtCore, QtWidgets, QtGui
import onionshare, onionshare_gui
+# Disable py2exe logging in Windows. Comment these if you need logs. See:
+# http://www.py2exe.org/index.cgi/StderrLog
+# http://stackoverflow.com/questions/20549843/py2exe-generate-log-file
+import sys
+f = open(os.devnull, 'w')
+sys.stdout = f
+sys.stderr = f
+
onionshare_gui.main()
diff --git a/setup.py b/setup.py
index 9ad89b4..957b929 100644
--- a/setup.py
+++ b/setup.py
@@ -121,3 +121,28 @@ elif system == 'Darwin':
},
setup_requires=['py2app', 'flask', 'stem'],
)
+
+elif system == 'Windows':
+ import py2exe
+ setup(
+ name='OnionShare',
+ version=version,
+ description=description,
+ long_description=long_description,
+ data_files=[
+ ('images', images),
+ ('locale', locale),
+ ('html', ['onionshare/index.html', 'onionshare/404.html']),
+ ('', ['version', 'install/license.txt', 'install/onionshare.ico']),
+ ('platforms', ['C:\\Python34\\Lib\\site-packages\\PyQt5\\plugins\\platforms\\qwindows.dll'])
+ ],
+ windows=['install/windows_scripts/onionshare.py'],
+ options={
+ 'py2exe': {
+ 'includes': [
+ 'PyQt5', 'PyQt5.QtCore', 'PyQt5.QtGui', 'PyQt5.QtWidgets',
+ 'jinja2', 'jinja2.ext', 'sip']
+ }
+ },
+ setup_requires=['py2exe', 'flask', 'stem'],
+ )
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-privacy/packages/onionshare.git
More information about the Pkg-privacy-commits
mailing list