Skip to content

Avoid overwriting Project.toml / Manifest.toml #62

@visr

Description

@visr

I'm a new user of juliacall / pyjuliapkg, so bear with me. My use case is building docs in a monorepo where Python will call Julia code. For CI and developer environment I have both pixi.lock and Manifest.toml checked in, and I want to use them.

Based on the docs I figured I could use PYTHON_JULIAPKG_PROJECT to use my existing Julia project. I was surprised when pyjuliapkg overwrote it with

[deps]
OpenSSL_jll = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d"

[compat]
OpenSSL_jll = "3.0.0 - 3.5"
PythonCall = "=0.9.26"

It was clear that these are needed, so I discarded the changes and added them myself. This seemed to work, but I think I now understand that only worked because pyjuliapkg/meta.json was written. Since this file has absolute paths I didn't want to check this in because it wouldn't work on CI.

After reading the deps.py code a bit I figured I could use PYTHON_JULIAPKG_OFFLINE=yes to avoid overwriting the existing Julia project, though that doesn't seem like its intended use.

I looked for other issues and just found this quote: #39 (comment)

But then again I suppose if the Manifest.toml is already compatible with juliapkg’s requirements, then it shouldn’t be updated. So perhaps that extra logic should be added, to prevent unintended updates.

That sounds helpful. Perhaps it just needs to be documented that PYTHON_JULIAPKG_PROJECT is for pyjuliapkg to manage, and this package would need something similar to CondaPkg.jl's Null backend, where it is clear that it is up to the user to manage it.

I guess besides using PYTHON_JULIAPKG_OFFLINE I can check in pyjuliapkg/meta.json?

pyjuliapkg/meta.json
{
    "meta_version": 5,
    "dev": false,
    "version": "1.11.6",
    "executable": "C:\\ProgramData\\DevDrives\\.julia\\juliaup\\julia-1.11.6+0.x64.w64.mingw32\\bin\\julia.exe",
    "deps_files": {
        "c:\\programdata\\devdrives\\temp\\jlcall\\.pixi\\envs\\default\\lib\\site-packages\\juliacall\\juliapkg.json": {
            "timestamp": 1752828690.8178058,
            "hash_sha256": "6ede5552d6a82f280768eacc10a93299eaaa43b5b312d4adef07fae7c5da541f"
        },
        "c:\\programdata\\devdrives\\temp\\jlcall\\.pixi\\envs\\default\\lib\\site-packages\\juliapkg\\juliapkg.json": {
            "timestamp": 1752828690.8373451,
            "hash_sha256": "6d034037e5fd1c550b11b18a378aeb7d4569d720e6e594d910105aac17cd0fce"
        }
    },
    "pkgs": [
        {
            "name": "PythonCall",
            "uuid": "6099a3de-0909-46bc-b1f4-468b9a2dfc0d",
            "dev": false,
            "version": "=0.9.26"
        },
        {
            "name": "OpenSSL_jll",
            "uuid": "458c3c95-2e84-50aa-8efc-19380b2a3a95",
            "dev": false,
            "version": "3.0.0 - 3.5"
        }
    ],
    "offline": false,
    "override_executable": null
}

The juliapkg.json only contains {"julia": "1"}
Perhaps I can make the meta.json paths relative and use forward slashes. But I'd rather avoid having to maintain another kind of lockfile.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions