| import subprocess | |
| from pathlib import Path | |
| import pytest | |
| # PyInstaller has been very unproactive about replacing 'imp' with 'importlib'. | |
| # It also leaks io.BytesIO()s. | |
| def test_pyinstaller(mode, tmp_path): | |
| """Compile and run pyinstaller-smoke.py using PyInstaller.""" | |
| pyinstaller_cli = pytest.importorskip("PyInstaller.__main__").run | |
| source = Path(__file__).with_name("pyinstaller-smoke.py").resolve() | |
| args = [ | |
| # Place all generated files in ``tmp_path``. | |
| '--workpath', str(tmp_path / "build"), | |
| '--distpath', str(tmp_path / "dist"), | |
| '--specpath', str(tmp_path), | |
| mode, | |
| str(source), | |
| ] | |
| pyinstaller_cli(args) | |
| if mode == "--onefile": | |
| exe = tmp_path / "dist" / source.stem | |
| else: | |
| exe = tmp_path / "dist" / source.stem / source.stem | |
| p = subprocess.run([str(exe)], check=True, stdout=subprocess.PIPE) | |
| assert p.stdout.strip() == b"I made it!" | |