Release 0.18.0-Pre
Total Page:16
File Type:pdf, Size:1020Kb
PyOxidizer Release 0.18.0-pre Sep 27, 2021 Contents 1 Overview 3 1.1 Benefits of PyOxidizer..........................................3 1.2 Components...............................................4 1.3 How It Works...............................................4 2 Getting Started 7 2.1 Python Requirements...........................................7 2.2 Operating System Requirements.....................................7 2.3 Installing.................................................8 2.4 High-Level Project Lifecycle...................................... 10 2.5 Your First PyOxidizer Project...................................... 10 2.6 The pyoxidizer.bzl Configuration File.............................. 11 2.7 Customizing Python and Packaging Behavior.............................. 11 3 The pyoxidizer Command Line Tool 13 3.1 Settings.................................................. 13 3.2 Creating New Projects with init-config-file .......................... 14 3.3 Creating New Rust Projects with init-rust-project ....................... 14 3.4 Building PyObject Projects with build ................................ 14 3.5 Running the Result of Building with run ................................ 15 3.6 Analyzing Produced Binaries with analyze .............................. 15 3.7 Inspecting Python Distributions..................................... 15 3.8 Debugging Resource Scanning and Identification with find-resources .............. 16 3.9 Defining Extra Variables in Starlark Environment............................ 17 4 Configuration Files 19 4.1 Automatic File Location Strategy.................................... 19 4.2 Concepts................................................. 19 4.3 Resource Attributes Influencing Adding................................. 21 4.4 Global Symbols............................................. 22 4.5 Functions for Manipulating Global State................................ 24 4.6 Functions for Managing Targets..................................... 25 4.7 Extensions to Tugger’s Starlark Dialect................................. 25 4.8 File ................................................... 26 4.9 PythonDistribution ........................................ 27 4.10 PythonEmbeddedResources .................................... 29 4.11 PythonExecutable ......................................... 29 i 4.12 PythonExtensionModule ..................................... 34 4.13 PythonInterpreterConfig .................................... 35 4.14 PythonModuleSource ........................................ 47 4.15 PythonPackageResource ..................................... 48 4.16 PythonPackageDistributionResource ............................ 48 4.17 PythonPackagingPolicy ..................................... 49 5 Packaging User Guide 53 5.1 Creating a PyOxidizer Project...................................... 53 5.2 Packaging Primitives in pyoxidizer.bzl Files........................... 54 5.3 Understanding Python Distributions................................... 56 5.4 Managing How Resources are Added.................................. 58 5.5 Packaging Python Files......................................... 64 5.6 Packaging Files Instead of In-Memory Resources............................ 69 5.7 Working with Python Extension Modules................................ 74 5.8 Managing Packed Resources Data.................................... 76 5.9 Trimming Unused Resources...................................... 78 5.10 Performance of Built Binaries...................................... 78 5.11 Packaging Pitfalls............................................ 80 5.12 Masquerading As Other Packaging Tools................................ 81 5.13 Standalone / Single File Applications with Static Linking....................... 82 5.14 Licensing Considerations........................................ 84 5.15 Terminfo Database............................................ 85 5.16 Using the multiprocessing Python Module............................ 86 5.17 SSL Certificate Loading......................................... 88 5.18 Using the tkinter Python Module.................................. 90 5.19 Building an Executable that Behaves Like python ........................... 91 6 Distributing User Guide 95 6.1 Overview................................................. 95 6.2 Portability of Binaries Built with PyOxidizer.............................. 96 6.3 Building Windows Installers with the WiX Toolset........................... 96 6.4 Distribution Considerations for Linux.................................. 97 6.5 Distribution Considerations for macOS................................. 99 6.6 Distribution Considerations for Windows................................ 101 7 oxidized_importer Python Extension 105 7.1 Getting Started.............................................. 105 7.2 Python Meta Path Finders........................................ 106 7.3 OxidizedFinder Meta Path Finder................................. 107 7.4 OxidizedFinder Behavior and Compliance............................. 108 7.5 oxidized_importer Python Resource Types............................ 112 7.6 Resource Scanning APIs......................................... 114 7.7 Loading Resource Files......................................... 114 7.8 Freezing Applications with oxidized_importer .......................... 120 7.9 OxidizedZipFinder Meta Path Finder............................... 122 7.10 Common Issues............................................. 123 7.11 Security Implications of Loading Resources............................... 124 7.12 API Reference.............................................. 124 7.13 Python Packed Resources........................................ 133 8 The pyembed Rust Crate 141 8.1 Controlling Python from Rust Code................................... 141 8.2 Adding Extension Modules At Run-Time................................ 142 ii 9 PyOxidizer for Rust Developers 143 9.1 Using Cargo with PyOxidizer Source Checkouts............................ 143 9.2 PyOxidizer Rust Projects......................................... 144 9.3 Controlling Python From Rust Code................................... 147 9.4 Porting a Python Application to Rust.................................. 149 10 Shipping Applications with tugger 155 10.1 Overview................................................. 155 10.2 Tugger Starlark Dialect.......................................... 156 10.3 Working with Files............................................ 178 10.4 Code Signing............................................... 179 10.5 Using the WiX Toolset to Produce Windows Installers......................... 187 10.6 Project History.............................................. 189 11 The PyOxy Python Runner 191 11.1 Overview................................................. 191 11.2 Running YAML Based Applications................................... 192 11.3 Development Guide........................................... 193 12 Frequently Asked Questions 195 12.1 Where Can I Report Bugs / Send Feedback / Request Features?.................... 195 12.2 Why Build Another Python Application Packaging Tool?........................ 195 12.3 Can Python 2.7 Be Supported?...................................... 196 12.4 Why is Python 3.8 Required?...................................... 196 12.5 No python interpreter found of version 3.* Error When Building......... 196 12.6 Why Rust?................................................ 196 12.7 Why is the Rust Code. Not Great?.................................. 197 12.8 What is the Magic Sauce That Makes PyOxidizer Special?....................... 197 12.9 Can Applications Import Python Modules from the Filesystem?.................... 197 12.10 error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory When Building......... 198 12.11 vcruntime140.dll was not found Error on Windows.................... 198 12.12 ld: unsupported tapi file type '!tapi-tbd' in YAML file on macOS When Building.............................................. 198 13 Project Status 199 13.1 What’s Working............................................. 199 13.2 Major Missing Features......................................... 199 13.3 Lesser Missing Features......................................... 201 13.4 Eventual Features............................................ 201 14 Comparisons to Other Tools 205 14.1 PyInstaller................................................ 205 14.2 py2exe.................................................. 206 14.3 py2app.................................................. 206 14.4 cx_Freeze................................................. 206 14.5 Shiv.................................................... 206 14.6 PEX.................................................... 207 14.7 XAR................................................... 207 14.8 Docker / Running a Container...................................... 207 14.9 Nuitka.................................................. 207 14.10 PyRun.................................................. 207 14.11 pynsist.................................................. 208 14.12 Bazel................................................... 208 iii 15 Contributing to PyOxidizer 209 15.1 As a User................................................. 209 15.2 As a Developer.............................................. 209 15.3 Financial Contributions......................................... 210 16 Project History 211 16.1 Blog Posts................................................ 211 16.2 Version