Reduce size of freeze build and added more documentation
This commit is contained in:
@@ -78,6 +78,8 @@ for debugging.
|
||||
|
||||
You can also provide a path to a folder containing a novelWriter project as the last parameter.
|
||||
|
||||
For more install options, see [Build and Install novelWriter](setup/BUILD.md).
|
||||
|
||||
|
||||
### Launcher and Icons
|
||||
|
||||
|
||||
@@ -28,28 +28,29 @@ OS_DARWIN = 3
|
||||
# Package Installer
|
||||
# =============================================================================================== #
|
||||
|
||||
def installPackages():
|
||||
def installPackages(hostOS):
|
||||
"""Install package dependencies both for this script and for running
|
||||
novelWriter itself.
|
||||
"""
|
||||
print("")
|
||||
print("Installing Dependencies")
|
||||
print("#######################")
|
||||
print("")
|
||||
try:
|
||||
subprocess.call([
|
||||
sys.executable, "-m",
|
||||
"pip", "install", "--user", "--upgrade", "pip"
|
||||
])
|
||||
subprocess.call([
|
||||
sys.executable, "-m",
|
||||
"pip", "install", "--user", "--upgrade", "pyinstaller"
|
||||
])
|
||||
subprocess.call([
|
||||
sys.executable, "-m",
|
||||
"pip", "install", "--user", "--upgrade", "-r", "requirements.txt"
|
||||
])
|
||||
except Exception as e:
|
||||
print("Failed with error:")
|
||||
print(str(e))
|
||||
sys.exit(1)
|
||||
|
||||
installQueue = ["pip", "pyinstaller", "-r requirements.txt"]
|
||||
if hostOS == OS_DARWIN:
|
||||
installQueue.append("pyobjc")
|
||||
|
||||
pyCmd = [sys.executable, "-m"]
|
||||
pipCmd = ["pip", "install", "--user", "--upgrade"]
|
||||
for stepCmd in installQueue:
|
||||
pkgCmd = stepCmd.split(" ")
|
||||
try:
|
||||
subprocess.call(pyCmd + pipCmd + pkgCmd)
|
||||
except Exception as e:
|
||||
print("Failed with error:")
|
||||
print(str(e))
|
||||
sys.exit(1)
|
||||
|
||||
return
|
||||
|
||||
@@ -73,6 +74,7 @@ def freezePackage(buildWindowed, oneFile, makeSetup, hostOS):
|
||||
else:
|
||||
dotDot = ":"
|
||||
|
||||
sys.modules["FixTk"] = None
|
||||
instOpt = [
|
||||
"--name=novelWriter",
|
||||
"--clean",
|
||||
@@ -92,6 +94,12 @@ def freezePackage(buildWindowed, oneFile, makeSetup, hostOS):
|
||||
"--exclude-module=PyQt5.QtSensors",
|
||||
"--exclude-module=PyQt5.QtSerialPort",
|
||||
"--exclude-module=PyQt5.QtSql",
|
||||
"--exclude-module=FixTk",
|
||||
"--exclude-module=tcl",
|
||||
"--exclude-module=tk",
|
||||
"--exclude-module=_tkinter",
|
||||
"--exclude-module=tkinter",
|
||||
"--exclude-module=Tkinter",
|
||||
]
|
||||
|
||||
if buildWindowed:
|
||||
@@ -263,8 +271,9 @@ if __name__ == "__main__":
|
||||
"This tool provides build commands for distibuting novelWriter as a\n"
|
||||
"package. The available options are as follows:\n"
|
||||
"\n"
|
||||
"help Print the help message.\n"
|
||||
"freeze Freeze the package and produces a folder of all\n"
|
||||
" dependecies using pyinstaller.\n"
|
||||
" dependencies using pyinstaller.\n"
|
||||
"onefile Build a standalone executable with all dependencies\n"
|
||||
" bundled. Implies 'freeze', cannot be used with 'setup'.\n"
|
||||
"pip Run pip to install all package dependencies for\n"
|
||||
@@ -290,11 +299,10 @@ if __name__ == "__main__":
|
||||
if "clean" in sys.argv:
|
||||
sys.argv.remove("clean")
|
||||
cleanInstall()
|
||||
sys.exit(0)
|
||||
|
||||
if "pip" in sys.argv:
|
||||
sys.argv.remove("pip")
|
||||
installPackages()
|
||||
installPackages(hostOS)
|
||||
|
||||
if "freeze" in sys.argv:
|
||||
sys.argv.remove("freeze")
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
# Build and Install novelWriter
|
||||
|
||||
The root folder of the repository contains two scripts for setup and install:
|
||||
|
||||
## Script `setup.py`
|
||||
|
||||
The `setup.py` is a standard Python setup script with a couple of additional options:
|
||||
|
||||
* `qthelp`: Will attempt to build a single file QtAssistand documentation file.
|
||||
This requires the Qt tools to be installed on the local system, as well as the sphinx build tools
|
||||
for the documentation.
|
||||
* `sample`: Will create a `sample.zip` file in the `nw/assets` folder.
|
||||
This is the file the New Project Wizard uses to generate an example project.
|
||||
If novelWriter is run from source, this file is not needed.
|
||||
|
||||
To install novelWriter as a local Python package, run:
|
||||
```bash
|
||||
sudo python setup.py install
|
||||
```
|
||||
|
||||
## Script `make.py`
|
||||
|
||||
The `make.py` script provides a number of convenient options for building packages if novelWriter.
|
||||
|
||||
Usage:
|
||||
```bash
|
||||
python make.py [command]
|
||||
```
|
||||
|
||||
It currently accept the following commands:
|
||||
|
||||
* `help`: Print the help message.
|
||||
* `freeze`: Freeze the package and produces a folder of all dependencies using pyinstaller.
|
||||
* `onefile`: Build a standalone executable with all dependencies bundled.
|
||||
Implies `freeze`, cannot be used with `setup`.
|
||||
* `pip`: Run pip to install all package dependencies for novelWriter and this build tool.
|
||||
* `setup`: Build a setup.exe installer for Windows.
|
||||
This option automaticall disables the `onefile` option.
|
||||
* `clean`: This will attempt to delete the `build` and `dist` folders in the current folder.
|
||||
|
||||
For instance, to create a Windows installer, run:
|
||||
```bash
|
||||
python make.py freeze setup
|
||||
```
|
||||
Reference in New Issue
Block a user