indygreg / PyOxidizer

A modern Python application packaging and distribution tool
Mozilla Public License 2.0
5.39k stars 234 forks source link

error[PYOXIDIZER_PYTHON_EXECUTABLE]: adding PythonExecutable to FileManifest #610

Open liudonghua123 opened 2 years ago

liudonghua123 commented 2 years ago

I tried to create a startup example project via pyoxidizer init-config-file . and run pyoxidizer run, then I got error[PYOXIDIZER_PYTHON_EXECUTABLE]: adding PythonExecutable to FileManifest, error: adding PythonExecutable to FileManifest errors.

D:\code\python>mkdir pyoxidizer_example1

D:\code\python>cd pyoxidizer_example1\

D:\code\python\pyoxidizer_example1>pyoxidizer --help
PyOxidizer 0.22.0
Gregory Szorc <gregory.szorc@gmail.com>
Build and distribute Python applications

USAGE:
    pyoxidizer [OPTIONS] [SUBCOMMAND]

OPTIONS:
    -h, --help
            Print help information

        --system-rust
            Use a system install of Rust instead of a self-managed Rust installation

    -V, --version
            Print version information

        --verbose
            Increase logging verbosity. Can be specified multiple times

SUBCOMMANDS:
    analyze
            Analyze a built binary
    build
            Build a PyOxidizer enabled project
    cache-clear
            Clear PyOxidizer's user-specific cache
    find-resources
            Find resources in a file or directory
    generate-python-embedding-artifacts
            Generate files useful for embedding Python in a [Rust] binary
    help
            Print this message or the help of the given subcommand(s)
    init-config-file
            Create a new PyOxidizer configuration file.
    init-rust-project
            Create a new Rust project embedding a Python interpreter
    list-targets
            List targets available to resolve in a configuration file
    python-distribution-extract
            Extract a Python distribution archive to a directory
    python-distribution-info
            Show information about a Python distribution archive
    python-distribution-licenses
            Show licenses for a given Python distribution
    run
            Run a target in a PyOxidizer configuration file
    run-build-script
            Run functionality that a build script would perform
    rust-project-licensing
            Show licensing information for a Rust project

D:\code\python\pyoxidizer_example1>pyoxidizer init-config-file .
writing .\pyoxidizer.bzl

A new PyOxidizer configuration file has been created.
This configuration file can be used by various `pyoxidizer`
commands

For example, to build and run the default Python application:

  $ cd .
  $ pyoxidizer run

The default configuration is to invoke a Python REPL. You can
edit the configuration file to change behavior.

D:\code\python\pyoxidizer_example1>pyoxidizer run
resolving 1 targets
resolving target install
resolving target exe
target Python distribution for x86_64-pc-windows-msvc resolves to: https://github.com/indygreg/python-build-standalone/releases/download/20220528/cpython-3.10.4%2B20220528-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst (sha256=d636dc1bcca74dd9c6e3b26f7c081b3e229336e8378fe554bf8ba65fe780a2ac)
reusing target Python distribution for host execution
adding Python executable . to .
ensuring Rust toolchain 1.61.0 is available
rustc for x86_64-pc-windows-msvc in C:\Users\Liu.D.H\AppData\Local\pyoxidizer\rust\1.61.0-x86_64-pc-windows-msvc is up-to-date
cargo for x86_64-pc-windows-msvc in C:\Users\Liu.D.H\AppData\Local\pyoxidizer\rust\1.61.0-x86_64-pc-windows-msvc is up-to-date
rust-std for x86_64-pc-windows-msvc in C:\Users\Liu.D.H\AppData\Local\pyoxidizer\rust\1.61.0-x86_64-pc-windows-msvc is up-to-date
     Created binary (application) package
writing C:\Users\LIUD~1.H\AppData\Local\Temp\pyoxidizerBoN9i2\.\.cargo\config
writing C:\Users\LIUD~1.H\AppData\Local\Temp\pyoxidizerBoN9i2\.\Cargo.lock
writing C:\Users\LIUD~1.H\AppData\Local\Temp\pyoxidizerBoN9i2\.\build.rs
writing C:\Users\LIUD~1.H\AppData\Local\Temp\pyoxidizerBoN9i2\.\src\main.rs
writing C:\Users\LIUD~1.H\AppData\Local\Temp\pyoxidizerBoN9i2\.\pyoxidizer.bzl
writing C:\Users\LIUD~1.H\AppData\Local\Temp\pyoxidizerBoN9i2\.\pyoxidizerBoN9i2.exe.manifest    
writing C:\Users\LIUD~1.H\AppData\Local\Temp\pyoxidizerBoN9i2\.\pyoxidizerBoN9i2-manifest.rc     
warning: _distutils_hack contains __file__
warning: asyncio.__main__ contains __file__
warning: cProfile contains __file__
warning: distutils.command.sdist contains __file__
warning: distutils.core contains __file__
warning: distutils.dist contains __file__
warning: doctest contains __file__
warning: encodings contains __file__
warning: idlelib.browser contains __file__
warning: idlelib.config contains __file__
warning: idlelib.help contains __file__
warning: idlelib.help_about contains __file__
warning: idlelib.idle contains __file__
warning: idlelib.pyshell contains __file__
warning: idlelib.runscript contains __file__
warning: idlelib.tree contains __file__
warning: importlib contains __file__
warning: importlib._bootstrap contains __file__
warning: importlib._bootstrap_external contains __file__
warning: importlib.abc contains __file__
warning: inspect contains __file__
warning: lib2to3.pygram contains __file__
warning: logging contains __file__
warning: logging.handlers contains __file__
warning: modulefinder contains __file__
warning: msilib.text contains __file__
warning: multiprocessing.spawn contains __file__
warning: pdb contains __file__
warning: pip.__main__ contains __file__
warning: pip._internal.build_env contains __file__
warning: pip._internal.commands.debug contains __file__
warning: pip._internal.utils.misc contains __file__
warning: pip._internal.utils.setuptools_build contains __file__
warning: pip._internal.utils.virtualenv contains __file__
warning: pip._vendor contains __file__
warning: pip._vendor.certifi.core contains __file__
warning: pip._vendor.distlib.resources contains __file__
warning: pip._vendor.pep517.in_process contains __file__
warning: pip._vendor.pep517.in_process._in_process contains __file__
warning: pip._vendor.pkg_resources contains __file__
warning: pip._vendor.pygments.formatters._mapping contains __file__
warning: pip._vendor.pygments.lexers._mapping contains __file__
warning: pip._vendor.pygments.lexers.python contains __file__
warning: pip._vendor.pygments.sphinxext contains __file__
warning: pip._vendor.pygments.unistring contains __file__
warning: pip._vendor.rich.pretty contains __file__
warning: pip._vendor.rich.traceback contains __file__
warning: pkg_resources contains __file__
warning: pkgutil contains __file__
warning: profile contains __file__
warning: pyclbr contains __file__
warning: pydoc contains __file__
warning: pydoc_data.topics contains __file__
warning: runpy contains __file__
warning: setuptools._distutils.command.bdist_wininst contains __file__
warning: setuptools._distutils.command.sdist contains __file__
warning: setuptools._distutils.core contains __file__
warning: setuptools._distutils.dist contains __file__
warning: setuptools.build_meta contains __file__
warning: setuptools.command.bdist_egg contains __file__
warning: setuptools.command.build_ext contains __file__
warning: setuptools.command.py36compat contains __file__
warning: setuptools.command.setopt contains __file__
warning: setuptools.launch contains __file__
warning: setuptools.sandbox contains __file__
warning: site contains __file__
warning: trace contains __file__
warning: turtle contains __file__
warning: turtledemo.__main__ contains __file__
warning: unittest contains __file__
warning: unittest.loader contains __file__
warning: venv contains __file__
warning: zipimport contains __file__
__file__ was encountered in some embedded modules
PyOxidizer does not set __file__ and this may create problems at run-time
See https://github.com/indygreg/PyOxidizer/issues/69 for more
building with Rust 1.61.0
error: no bin target named `.`
error[PYOXIDIZER_PYTHON_EXECUTABLE]: adding PythonExecutable to FileManifest

    Caused by:
        0: building Python executable
        1: building executable with Rust project
        2: cargo build failed
       --> .\pyoxidizer.bzl:283:5
        |
    283 |     files.add_python_resource(".", exe)
        |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PythonExecutable.to_file_manifest()

error: adding PythonExecutable to FileManifest

Caused by:
    0: building Python executable
    1: building executable with Rust project
    2: cargo build failed

D:\code\python\pyoxidizer_example1>pyoxidizer --version
PyOxidizer 0.22.0
commit: unknown
source: https://github.com/indygreg/PyOxidizer.git
pyembed crate location: version = "0.22.0"

D:\code\python\pyoxidizer_example1>python -V
Python 3.10.2

D:\code\python\pyoxidizer_example1>
calebho commented 1 year ago

Was having this issue; think the fix is to replace "." with a name

def make_exe()
    # ...
    exe = dist.to_python_executable(
        name="actual_name_here",  # <---
        packaging_policy=policy,
        config=python_config,
    )
    # ...
    return exe
diofri commented 1 year ago

Hi this doesn't solve the issue on the slightest. Here's how I reproduced the error: rustc --version //rustc 1.65.0 (897e37553 2022-11-02) cargo install pyoxidizer pyoxidizer --version // PyOxidizer 0.23.0 pyoxidizer init-config-file pyapp cd pyapp pyoxidizer run // RESULT:

resolving 1 targets resolving target install resolving target exe target Python distribution for x86_64-pc-windows-msvc resolves to: https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.10.8%2B20221106-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst (sha256=ab40f9584be896c697c5fca351ab82d7b55f01b8eb0494f0a15a67562e49161a) reusing target Python distribution for host execution adding Python executable pyapp to . ensuring Rust toolchain 1.61.0 is available fetching https://static.rust-lang.org/dist/channel-rust-1.61.0.toml.sha256 Sending fatal alert BadCertificate error[PYOXIDIZER_PYTHON_EXECUTABLE]: adding PythonExecutable to FileManifest

Caused by:
    0: building Python executable
    1: resolving Rust toolchain
    2: fetching manifest
    3: error sending request for url (https://static.rust-lang.org/dist/channel-rust-1.61.0.toml.sha256): error trying to connect: invalid peer certificate contents: invalid peer certificate: UnknownIssuer
    4: error trying to connect: invalid peer certificate contents: invalid peer certificate: UnknownIssuer
    5: invalid peer certificate contents: invalid peer certificate: UnknownIssuer
   --> .\pyoxidizer.bzl:283:5
    |
283 |     files.add_python_resource(".", exe)
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PythonExecutable.to_file_manifest()
andr0s commented 7 months ago

This is not resolved? Omg

dotzborro commented 4 months ago

I hit this issue after downgrading from 0.24.0 (because of #673)

This is what I do:

$ stat app2
stat: cannot statx 'app2': No such file or directory
$ pyoxidizer -V
PyOxidizer 0.23.0
$ pyoxidizer init-config-file app2 >/dev/null
$ cd app2
$ grep 'name.*app2' -B1 pyoxidizer.bzl
    exe = dist.to_python_executable(
        name="app2",
$ pyoxidizer build --release --target-triple x86_64-unknown-linux-musl
[...]
linking customized Python library...
error[PYOXIDIZER_PYTHON_EXECUTABLE]: adding PythonExecutable to FileManifest

    Caused by:
        0: building Python executable
        1: building executable with Rust project
        2: obtaining embedded python context
        3: No such file or directory (os error 2)
       --> ./pyoxidizer.bzl:283:5
        |
    283 |     files.add_python_resource(".", exe)
        |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PythonExecutable.to_file_manifest()

musl doesn't seem to matter here. Neither does release. It always seems to fail.

My OS is Ubuntu 22.04. uname -a shows:

Linux [redacted] 6.5.0-27-generic #28~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 15 10:51:06 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

I have also setup archlinux using Vagrant to factor out environmental problems.

Vagrantfile w/ libvirt:

Vagrant.configure("2") do |config|
  config.vm.box = "archlinux/archlinux"

  config.vm.provider :libvirt do |domain|
      domain.memory = 4096
      domain.cpus = 4
      domain.machine_virtual_size = 80
  end
end

Commands extracted from history:

# ... partition/fs extension commands omitted for brevity
sudo pacman -Sy gcc rustup libxcrypt libxcrypt-compat
rustup install stable
rustup default stable
cargo install pyoxidizer@0.23.0
export PATH=$PATH:/home/vagrant/.cargo/bin/
pyoxidizer init-config-file app2
cd app2
pyoxidizer build --release --target-triple x86_64-unknown-linux-musl