pixi icon indicating copy to clipboard operation
pixi copied to clipboard

problem with editable pypi packages and solve-groups

Open kcajf opened this issue 1 year ago • 3 comments

Checks

  • [X] I have checked that this issue has not already been reported.

  • [X] I have confirmed this bug exists on the latest version of pixi, using pixi --version.

Reproducible example

Folder structure:

tree -h .
.
├── [ 4.0K]  my_python_proj
│   ├── [ 4.0K]  mylib
│   │   └── [    1]  __init__.py
│   └── [  155]  setup.py
├── [  16K]  pixi.lock
└── [  422]  pixi.toml

pixi.toml:

[project]
name = "proj"
version = "0.1.0"
channels = [ "conda-forge" ]
platforms = ["linux-64"]

[tasks]

[system-requirements]
linux = "4.18"

[dependencies]
python = "3.11.*"

[feature.my-feature.pypi-dependencies]
seagull = { path = "./my_python_proj", editable = true }

[environments]
env1 = { features = ["my-feature"], solve-group = "test-group" }
env2 = { features = ["my-feature"], solve-group = "test-group" }

__init__.py is empty

setup.py contains:

import setuptools

setuptools.setup(
    name="my_python_proj",
    version="0.0.0",
    packages=setuptools.find_packages(),
    install_requires=[],
)

To reproduce:

pixi --version
pixi 0.25.0

pixi run --environment env1 python -c 'import mylib'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'mylib'

If you change the solve-groups to be different (e.g. change one of them to test-group-2), import mylib will work.

Issue description

It seems that when you use solve-groups and editabled pypi packages, sometimes the packages don't end up getting included in the solve.

Expected behavior

it should be possible to import these packages

kcajf avatar Jul 18 '24 17:07 kcajf

He @kcajf,

I'm not able to reproduce. It wouldn't solve so I replaced seagull with my_python_proj. (which is important to contain the same name).

Then it worked as the expected behavior describes:

~/proj
❯ pixi run --environment env1 python -c 'import mylib'

~/proj took 2s
❯ pixi run -e env1 python
Python 3.11.9 | packaged by conda-forge | (main, Apr 19 2024, 18:36:13) [GCC 12.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mylib
>>>

Would you be able to find another reproducer? This is would be very helpful if I can properly reproduce it!

ruben-arts avatar Jul 18 '24 18:07 ruben-arts

Sorry, that was a copy-paste error. In my example, I meant for it to show:

[feature.my-feature.pypi-dependencies]
my_lib = { path = "./my_python_proj", editable = true }

For which I still see the error.

I didn't realise that the name needed to be that of the project name in setup.py(). I think it is confusing that my example does work if the solve-groups are different. Should it instead give an error that the name is wrong?

kcajf avatar Jul 18 '24 22:07 kcajf

Hey, I've been really loving Pixi. However, I'm having a similar issue where I have this module: https://gitlab.inria.fr/bkerbl/simple-knn

As part of my project in the directory modules/simple-knn.

I added it to my pyproject.toml as:

simple-knn = {path = "./modules/simple-knn", editable=true}

and I get the error:

failed to solve the pypi requirements of 'default' 'linux-64'
  ├─▶ failed to resolve pypi dependencies
  ├─▶ Failed to build `simple-knn @ file:///home/nyx/projects/Genesis/modules/simple-knn`
  ├─▶ Failed to build: `simple-knn @ file:///home/nyx/projects/Genesis/modules/simple-knn`
  ╰─▶ Build backend failed to determine extra requires with `build_editable()` with exit status: 1
      --- stdout:
      
      --- stderr:
      Traceback (most recent call last):
        File "<string>", line 14, in <module>
        File "/home/nyx/.cache/rattler/cache/uv-cache/environments-v0/.tmpy7u8zk/lib/python3.11/site-packages/setuptools/build_meta.py", line 448, in
      get_requires_for_build_editable
          return self.get_requires_for_build_wheel(config_settings)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/home/nyx/.cache/rattler/cache/uv-cache/environments-v0/.tmpy7u8zk/lib/python3.11/site-packages/setuptools/build_meta.py", line 325, in
      get_requires_for_build_wheel
          return self._get_build_requires(config_settings, requirements=['wheel'])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/home/nyx/.cache/rattler/cache/uv-cache/environments-v0/.tmpy7u8zk/lib/python3.11/site-packages/setuptools/build_meta.py", line 295, in _get_build_requires
          self.run_setup()
        File "/home/nyx/.cache/rattler/cache/uv-cache/environments-v0/.tmpy7u8zk/lib/python3.11/site-packages/setuptools/build_meta.py", line 487, in run_setup
          super().run_setup(setup_script=setup_script)
        File "/home/nyx/.cache/rattler/cache/uv-cache/environments-v0/.tmpy7u8zk/lib/python3.11/site-packages/setuptools/build_meta.py", line 311, in run_setup
          exec(code, locals())
        File "<string>", line 12, in <module>
      ModuleNotFoundError: No module named 'torch'

I have torch installed. However, running pip install -e modules/simple-knn seems to work.

IshanArya avatar Aug 10 '24 03:08 IshanArya

This is because we always use build isolation. This is being addressed in: https://github.com/prefix-dev/pixi/issues/1124. Closing this issue for now. Please reopen if you feel I closed it too soon!

baszalmstra avatar Aug 20 '24 13:08 baszalmstra