From a374fb4a120d93ef479c1de5c9f7033dfcc0dc85 Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Wed, 5 Apr 2017 16:18:03 -0700 Subject: [PATCH 1/2] Appveyor (#1101) Appveyor setup --- .appveyor.yml | 188 +++++++++++++++++++++++++ pyfa.spec => dist_assets/win/pyfa.spec | 2 +- dist_assets/win/pyfa_debug.spec | 83 +++++++++++ 3 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 .appveyor.yml rename pyfa.spec => dist_assets/win/pyfa.spec (96%) create mode 100644 dist_assets/win/pyfa_debug.spec diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 000000000..52a03f390 --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,188 @@ +environment: + access_token: + secure: a328a5a4185ae823ae77430883ced14733f426a7 + + global: + # SDK v7.0 MSVC Express 2008's SetEnv.cmd script will fail if the + # /E:ON and /V:ON options are not enabled in the batch script intepreter + # See: http://stackoverflow.com/a/13751649/163740 + CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\appveyor\\run_with_env.cmd" + + matrix: + + # Python 2.7.10 is the latest version and is not pre-installed. + + - PYTHON: "C:\\Python27.10" + PYTHON_VERSION: "2.7.10" + PYTHON_ARCH: "32" + + - PYTHON: "C:\\Python27.10-x64" + PYTHON_VERSION: "2.7.10" + PYTHON_ARCH: "64" + + # Pre-installed Python versions, which Appveyor may upgrade to + # a later point release. + # See: http://www.appveyor.com/docs/installed-software#python + + - PYTHON: "C:\\Python27" + PYTHON_VERSION: "2.7.x" # currently 2.7.9 + PYTHON_ARCH: "32" + + - PYTHON: "C:\\Python27-x64" + PYTHON_VERSION: "2.7.x" # currently 2.7.9 + PYTHON_ARCH: "64" + + #- PYTHON: "C:\\Python33" + # PYTHON_VERSION: "3.3.x" # currently 3.3.5 + # PYTHON_ARCH: "32" + + #- PYTHON: "C:\\Python33-x64" + # PYTHON_VERSION: "3.3.x" # currently 3.3.5 + # PYTHON_ARCH: "64" + + #- PYTHON: "C:\\Python34" + # PYTHON_VERSION: "3.4.x" # currently 3.4.3 + # PYTHON_ARCH: "32" + + #- PYTHON: "C:\\Python34-x64" + # PYTHON_VERSION: "3.4.x" # currently 3.4.3 + # PYTHON_ARCH: "64" + + # Python versions not pre-installed + + # Python 2.6.6 is the latest Python 2.6 with a Windows installer + # See: https://github.com/ogrisel/python-appveyor-demo/issues/10 + + #- PYTHON: "C:\\Python266" + # PYTHON_VERSION: "2.6.6" + # PYTHON_ARCH: "32" + + #- PYTHON: "C:\\Python266-x64" + # PYTHON_VERSION: "2.6.6" + # PYTHON_ARCH: "64" + + #- PYTHON: "C:\\Python35" + # PYTHON_VERSION: "3.5.0" + # PYTHON_ARCH: "32" + + #- PYTHON: "C:\\Python35-x64" + # PYTHON_VERSION: "3.5.0" + # PYTHON_ARCH: "64" + + # Major and minor releases (i.e x.0.0 and x.y.0) prior to 3.3.0 use + # a different naming scheme. + + - PYTHON: "C:\\Python270" + PYTHON_VERSION: "2.7.0" + PYTHON_ARCH: "32" + + - PYTHON: "C:\\Python270-x64" + PYTHON_VERSION: "2.7.0" + PYTHON_ARCH: "64" + +install: + # If there is a newer build queued for the same PR, cancel this one. + # The AppVeyor 'rollout builds' option is supposed to serve the same + # purpose but it is problematic because it tends to cancel builds pushed + # directly to master instead of just PR builds (or the converse). + # credits: JuliaLang developers. + - ps: if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod ` + https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | ` + Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { ` + throw "There are newer queued builds for this pull request, failing early." } + + # Install wxPython + - 'ECHO Downloading wxPython.' + - "appveyor DownloadFile https://goo.gl/yvO8PB -FileName C:\\wxpython.exe" + - "appveyor DownloadFile https://goo.gl/Uj0jV3 -FileName C:\\wxpython64.exe" + + - 'ECHO Install wxPython' + - "C:\\wxpython.exe /SP- /VERYSILENT /NORESTART" + - "C:\\wxpython64.exe /SP- /VERYSILENT /NORESTART" + + - ECHO "Filesystem root:" + - ps: "ls \"C:/\"" + + - ECHO "Filesystem pyfa root:" + - ps: "ls \"C:\\projects\\pyfa\\\"" + + - ECHO "Installed SDKs:" + - ps: "ls \"C:/Program Files/Microsoft SDKs/Windows\"" + + # Install Python (from the official .msi of http://python.org) and pip when + # not already installed. + # - ps: if (-not(Test-Path($env:PYTHON))) { & appveyor\install.ps1 } + + # Prepend newly installed Python to the PATH of this build (this cannot be + # done from inside the powershell script as it would require to restart + # the parent CMD process). + - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" + + # Check that we have the expected version and architecture for Python + - "python --version" + - "python -c \"import struct; print(struct.calcsize('P') * 8)\"" + + # Upgrade to the latest version of pip to avoid it displaying warnings + # about it being out of date. + - "pip install --disable-pip-version-check --user --upgrade pip" + + # Install the build dependencies of the project. If some dependencies contain + # compiled extensions and are not provided as pre-built wheel packages, + # pip will build them from source using the MSVC compiler matching the + # target Python version and architecture + # C:\\projects\\eve-gnosis\\ + - ECHO "Install pip requirements:" + - "pip install -r requirements.txt" + - "pip install -r requirements_test.txt" + - "pip install -r requirements_build_windows.txt" + +build_script: + # Build the compiled extension + # - "python setup.py build" + - ECHO "Build pyfa:" + - copy C:\projects\pyfa\dist_assets\win\pyfa.spec C:\projects\pyfa\pyfa.spec + - "pyinstaller.exe --clean --noconfirm --windowed --upx-dir=C:\\projects\\pyfa\\scripts\\upx.exe C:\\projects\\pyfa\\pyfa.spec" + + - ECHO "Build pyfa (Debug):" + - copy C:\projects\pyfa\dist_assets\win\pyfa_debug.spec C:\projects\pyfa\pyfa_debug.spec + - "pyinstaller.exe --clean --noconfirm --windowed --upx-dir=C:\\projects\\pyfa\\scripts\\upx.exe C:\\projects\\pyfa\\pyfa_debug.spec" + +build: on + +after_build: + - ps: "ls \"./\"" + #- ps: "ls \"C:\\projects\\pyfa\\build\\pyfa\\\"" + - ps: "ls \"C:\\projects\\pyfa\\dist\\\"" + - ps: "ls \"C:\\projects\\pyfa\\dist\\pyfa\\\"" + # Zip + # APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER + #- 7z a build.zip -r C:\projects\pyfa\build\pyfa\*.* + - 7z a pyfa.zip -r C:\projects\pyfa\dist\pyfa\*.* + - 7z a pyfa_debug.zip -r C:\projects\pyfa\dist\pyfa_debug\*.* + +on_success: + # Do nothing right now + +test_script: + - tox + - "py.test --cov=./" + # Run the project tests + # - "%CMD_IN_ENV% python C:/projects/eve-gnosis/setup.py nosetests" + +after_test: + # If tests are successful, create binary packages for the project. + # - "%CMD_IN_ENV% python setup.py bdist_wheel" + # - "%CMD_IN_ENV% python setup.py bdist_wininst" + # - "%CMD_IN_ENV% python setup.py bdist_msi" + # - ps: "ls dist" + +artifacts: + # Archive the generated packages in the ci.appveyor.com build report. + - path: pyfa.zip + name: Pyfa + - path: pyfa_debug.zip + name: Pyfa_debug + +#on_success: +# - TODO: upload the content of dist/*.whl to a public wheelhouse +# \ No newline at end of file diff --git a/pyfa.spec b/dist_assets/win/pyfa.spec similarity index 96% rename from pyfa.spec rename to dist_assets/win/pyfa.spec index c528aeecb..0f61a860d 100644 --- a/pyfa.spec +++ b/dist_assets/win/pyfa.spec @@ -40,7 +40,7 @@ for root, folders, files in os.walk("eos/effects"): a = Analysis( ['pyfa.py'], - pathex=['C:\\Users\\Ebag333\\Documents\\GitHub\\Ebag333\\Pyfa'], + pathex=['C:\\projects\\pyfa\\'], binaries=[], datas=added_files, hiddenimports=import_these, diff --git a/dist_assets/win/pyfa_debug.spec b/dist_assets/win/pyfa_debug.spec new file mode 100644 index 000000000..bc604dd10 --- /dev/null +++ b/dist_assets/win/pyfa_debug.spec @@ -0,0 +1,83 @@ +# -*- mode: python -*- + +# Note: This script is provided AS-IS for those that may be interested. +# pyfa does not currently support pyInstaller (or any other build process) 100% at the moment + +# Command line to build: +# (Run from directory where pyfa.py and pyfa.spec lives.) +# c:\Python27\scripts\pyinstaller.exe --clean --noconfirm --windowed --upx-dir=.\scripts\upx.exe pyfa.spec + +# Don't forget to change the path to where your pyfa.py and pyfa.spec lives +# pathex=['C:\\Users\\Ebag333\\Documents\\GitHub\\Ebag333\\Pyfa'], + +import os + +block_cipher = None + +added_files = [ + ( 'imgs/gui/*.png', 'imgs/gui' ), + ( 'imgs/gui/*.gif', 'imgs/gui' ), + ( 'imgs/icons/*.png', 'imgs/icons' ), + ( 'imgs/renders/*.png', 'imgs/renders' ), + ( 'dist_assets/win/pyfa.ico', '.' ), + ( 'dist_assets/cacert.pem', '.' ), + ( 'eve.db', '.' ), + ( 'README.md', '.' ), + ( 'LICENSE', '.' ), + ] + +import_these = [] + +# Walk eos.effects and add all effects so we can import them properly +for root, folders, files in os.walk("eos/effects"): + for file_ in files: + if file_.endswith(".py") and not file_.startswith("_"): + mod_name = "{}.{}".format( + root.replace("/", "."), + file_.split(".py")[0], + ) + import_these.append(mod_name) + +a = Analysis( + ['pyfa.py'], + pathex=['C:\\projects\\pyfa\\'], + binaries=[], + datas=added_files, + hiddenimports=import_these, + hookspath=[], + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + ) + +pyz = PYZ( + a.pure, + a.zipped_data, + cipher=block_cipher, + ) + +exe = EXE(pyz, + a.scripts, + exclude_binaries=True, + debug=True, + console=True, + strip=False, + upx=True, + name='pyfa_debug', + icon='dist_assets/win/pyfa.ico', + onefile=False, + ) + +coll = COLLECT( + exe, + a.binaries, + a.zipfiles, + a.datas, + strip=False, + upx=True, + onefile=False, + name='pyfa_debug', + icon='dist_assets/win/pyfa.ico', + ) From dec5970bd6f24d7e15d6502bc7e5490f959b6a1c Mon Sep 17 00:00:00 2001 From: blitzmann Date: Sun, 16 Apr 2017 11:12:15 -0400 Subject: [PATCH 2/2] Update appveyor to use cx_freeze until pyInstaller is reviewed. --- .appveyor.yml | 64 ++++++++++++++++------------------ requirements_build_windows.txt | 1 + setup.py | 22 +++++++++++- 3 files changed, 53 insertions(+), 34 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 52a03f390..e63978a5f 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -1,6 +1,4 @@ environment: - access_token: - secure: a328a5a4185ae823ae77430883ced14733f426a7 global: # SDK v7.0 MSVC Express 2008's SetEnv.cmd script will fail if the @@ -16,21 +14,21 @@ environment: PYTHON_VERSION: "2.7.10" PYTHON_ARCH: "32" - - PYTHON: "C:\\Python27.10-x64" - PYTHON_VERSION: "2.7.10" - PYTHON_ARCH: "64" + #- PYTHON: "C:\\Python27.10-x64" + # PYTHON_VERSION: "2.7.10" + # PYTHON_ARCH: "64" # Pre-installed Python versions, which Appveyor may upgrade to # a later point release. # See: http://www.appveyor.com/docs/installed-software#python - - PYTHON: "C:\\Python27" - PYTHON_VERSION: "2.7.x" # currently 2.7.9 - PYTHON_ARCH: "32" + #- PYTHON: "C:\\Python27" + # PYTHON_VERSION: "2.7.x" # currently 2.7.9 + # PYTHON_ARCH: "32" - - PYTHON: "C:\\Python27-x64" - PYTHON_VERSION: "2.7.x" # currently 2.7.9 - PYTHON_ARCH: "64" + #- PYTHON: "C:\\Python27-x64" + # PYTHON_VERSION: "2.7.x" # currently 2.7.9 + # PYTHON_ARCH: "64" #- PYTHON: "C:\\Python33" # PYTHON_VERSION: "3.3.x" # currently 3.3.5 @@ -72,13 +70,13 @@ environment: # Major and minor releases (i.e x.0.0 and x.y.0) prior to 3.3.0 use # a different naming scheme. - - PYTHON: "C:\\Python270" - PYTHON_VERSION: "2.7.0" - PYTHON_ARCH: "32" + #- PYTHON: "C:\\Python270" + # PYTHON_VERSION: "2.7.0" + # PYTHON_ARCH: "32" - - PYTHON: "C:\\Python270-x64" - PYTHON_VERSION: "2.7.0" - PYTHON_ARCH: "64" + #- PYTHON: "C:\\Python270-x64" + # PYTHON_VERSION: "2.7.0" + # PYTHON_ARCH: "64" install: # If there is a newer build queued for the same PR, cancel this one. @@ -94,11 +92,11 @@ install: # Install wxPython - 'ECHO Downloading wxPython.' - "appveyor DownloadFile https://goo.gl/yvO8PB -FileName C:\\wxpython.exe" - - "appveyor DownloadFile https://goo.gl/Uj0jV3 -FileName C:\\wxpython64.exe" + #- "appveyor DownloadFile https://goo.gl/Uj0jV3 -FileName C:\\wxpython64.exe" - 'ECHO Install wxPython' - "C:\\wxpython.exe /SP- /VERYSILENT /NORESTART" - - "C:\\wxpython64.exe /SP- /VERYSILENT /NORESTART" + #- "C:\\wxpython64.exe /SP- /VERYSILENT /NORESTART" - ECHO "Filesystem root:" - ps: "ls \"C:/\"" @@ -140,32 +138,32 @@ build_script: # Build the compiled extension # - "python setup.py build" - ECHO "Build pyfa:" - - copy C:\projects\pyfa\dist_assets\win\pyfa.spec C:\projects\pyfa\pyfa.spec - - "pyinstaller.exe --clean --noconfirm --windowed --upx-dir=C:\\projects\\pyfa\\scripts\\upx.exe C:\\projects\\pyfa\\pyfa.spec" + #- copy C:\projects\pyfa\dist_assets\win\pyfa.spec C:\projects\pyfa\pyfa.spec + - "python C:\\projects\\pyfa\\setup.py build" - - ECHO "Build pyfa (Debug):" - - copy C:\projects\pyfa\dist_assets\win\pyfa_debug.spec C:\projects\pyfa\pyfa_debug.spec - - "pyinstaller.exe --clean --noconfirm --windowed --upx-dir=C:\\projects\\pyfa\\scripts\\upx.exe C:\\projects\\pyfa\\pyfa_debug.spec" + #- ECHO "Build pyfa (Debug):" + #- copy C:\projects\pyfa\dist_assets\win\pyfa_debug.spec C:\projects\pyfa\pyfa_debug.spec + #- "pyinstaller.exe --clean --noconfirm --windowed --upx-dir=C:\\projects\\pyfa\\scripts\\upx.exe C:\\projects\\pyfa\\pyfa_debug.spec" build: on after_build: - ps: "ls \"./\"" #- ps: "ls \"C:\\projects\\pyfa\\build\\pyfa\\\"" - - ps: "ls \"C:\\projects\\pyfa\\dist\\\"" - - ps: "ls \"C:\\projects\\pyfa\\dist\\pyfa\\\"" + - ps: "ls \"C:\\projects\\pyfa\\build\\\"" + - ps: "ls \"C:\\projects\\pyfa\\build\\exe.win32-2.7\\\"" # Zip # APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER #- 7z a build.zip -r C:\projects\pyfa\build\pyfa\*.* - - 7z a pyfa.zip -r C:\projects\pyfa\dist\pyfa\*.* - - 7z a pyfa_debug.zip -r C:\projects\pyfa\dist\pyfa_debug\*.* + - 7z a pyfa.zip -r C:\projects\pyfa\build\exe.win32-2.7\*.* + #- 7z a pyfa_debug.zip -r C:\projects\pyfa\dist\pyfa_debug\*.* on_success: # Do nothing right now test_script: - - tox - - "py.test --cov=./" + #- tox + #- "py.test --cov=./" # Run the project tests # - "%CMD_IN_ENV% python C:/projects/eve-gnosis/setup.py nosetests" @@ -179,9 +177,9 @@ after_test: artifacts: # Archive the generated packages in the ci.appveyor.com build report. - path: pyfa.zip - name: Pyfa - - path: pyfa_debug.zip - name: Pyfa_debug + name: 'pyfa.zip' + #- path: pyfa_debug.zip + # name: Pyfa_debug #on_success: # - TODO: upload the content of dist/*.whl to a public wheelhouse diff --git a/requirements_build_windows.txt b/requirements_build_windows.txt index 173ce92d0..0d5cfb0ac 100644 --- a/requirements_build_windows.txt +++ b/requirements_build_windows.txt @@ -1,4 +1,5 @@ PyInstaller >= 3.2.1 +cx_freeze == 4.3.4 cycler >= 0.10.0 functools32 >= 3.2.3 future >= 0.16.0 diff --git a/setup.py b/setup.py index d35f69e87..0d281bd89 100644 --- a/setup.py +++ b/setup.py @@ -25,6 +25,24 @@ if __name__ == "__main__": # noinspection PyPackageRequirements,PyUnresolvedReferences from cx_Freeze import setup, Executable import config + import tempfile + import os + import zipfile + import shutil + tmpdir = tempfile.mkdtemp() + + imagesFile = os.path.join(tmpdir, "imgs.zip") + + def zipdir(path, zip): + for root, dirs, files in os.walk(path): + for file in files: + zip.write(os.path.join(root, file)) + + os.chdir('imgs') + with zipfile.ZipFile(imagesFile, 'w') as images: + for dir in icon_dirs: + zipdir(dir, images) + os.chdir('..') app_name = 'pyfa' app_version = '{}'.format(config.version) @@ -33,7 +51,7 @@ if __name__ == "__main__": # Windows-specific options build_options_winexe = { 'packages': packages, - 'include_files': include_files, + 'include_files': include_files+[imagesFile], 'includes': includes, 'excludes': excludes, 'compressed': True, @@ -81,3 +99,5 @@ if __name__ == "__main__": }, executables=[Executable(**executable_options)] ) + + shutil.rmtree(tmpdir)