PyOxidizer icon indicating copy to clipboard operation
PyOxidizer copied to clipboard

pyoxidizer init-rust-project does not works as documented

Open the-ica opened this issue 5 years ago • 3 comments

pyoxidizer init-rust-project pyapp

I then modified src/main.rs :

#![windows_subsystem = "console"]

use pyembed::MainPythonInterpreter;

// Include an auto-generated file containing the default
// pyembed::OxidizedPythonInterpreterConfig derived by the PyOxidizer
// configuration file.
//
// If you do not want to use PyOxidizer to generate this file, simply
// remove this line and instantiate your own instance of
// pyembed::OxidizedPythonInterpreterConfig.
include!(env!("PYOXIDIZER_DEFAULT_PYTHON_CONFIG_RS"));

fn main() {
    // The following code is in a block so the MainPythonInterpreter is destroyed in an
    // orderly manner, before process exit.
    let code = {
        // Load the default Python configuration as derived by the PyOxidizer config
        // file used at build time.
        let config = default_python_config();

        // Construct a new Python interpreter using that config, handling any errors
        // from construction.
        match MainPythonInterpreter::new(config) {
            Ok(mut interp) => {
                // And run it using the default run configuration as specified by the
                // configuration. If an uncaught Python exception is raised, handle it.
                // This includes the special SystemExit, which is a request to terminate the
                // process.
                // interp.run_as_main()
                let py = interp.acquire_gil().unwrap();
                match py.eval( "print('hello, world')", None, None) {
                    Ok(_) => println!("python code executed successfully"),
                    Err(e) => println!("python error: {:?}", e),
                }
                0
            }
            Err(msg) => {
                eprintln!("{}", msg);
                1
            }
        }
    };

    // And exit the process according to code execution results.
    std::process::exit(code);
}

but when running

pyoxidizer run

I get the same python REPL as without modification !

And also,

cargo run --features jemalloc build-mode-pyoxidizer-exe

fail with

Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'

That may be normal, but nothing tell me why in the doc.

I'm using ubuntu 20.04 and rust/cargo 1.47

the-ica avatar Dec 05 '20 22:12 the-ica

I am also having this problem but I haven't changed the sample rust project except for enabling jemalloc in Cargo.toml. Ubuntu 18.04.5 Rust 1.49.0 PyOxidizer 0.10.3

noahssarcastic avatar Jan 11 '21 20:01 noahssarcastic

What particularly bugs me about this is that the documentation mentions many times in relation to mixed python-rust projects to use pyoxidizer rather than cargo to build in order to perform many key steps you would otherwise need to glue together yourself, but doing so doesn't utilize any of your Rust code at all!

Skehmatics avatar Sep 15 '23 18:09 Skehmatics

Here's how I work around it: https://github.com/indygreg/PyOxidizer/pull/466

dae avatar Sep 15 '23 22:09 dae