Skip to content

Cannot install iocage via pip + Git repo #82

@astralblue

Description

@astralblue

Greetings,

I am trying to make my project depend on iocage. Since iocage is not on PyPI, I tried to use it using the "name @ URI" syntax, i.e.,

[project]
# ...
dependencies = [
    # ...
    "iocage @ git+https://github.com/freebsd/iocage@1.10",
]

However, pip install -e . fails with:

Obtaining file:///home/ab/remote-work/cage2jail
  Installing build dependencies ... done
  Checking if build backend supports build_editable ... done
  Getting requirements to build editable ... done
  Installing backend dependencies ... error
  error: subprocess-exited-with-error
  
  × pip subprocess to install backend dependencies did not run successfully.
  │ exit code: 1
  ╰─> [85 lines of output]
      Collecting iocage@ git+https://github.com/freebsd/iocage.git@1.10
        Cloning https://github.com/freebsd/iocage.git (to revision 1.10) to /tmp/pip-install-cn7k9ak6/iocage_5913cdd155f844c7a58e9a93e0cdd32d
        Running command git clone --filter=blob:none --quiet https://github.com/freebsd/iocage.git /tmp/pip-install-cn7k9ak6/iocage_5913cdd155f844c7a58e9a93e0cdd32d
        Running command git checkout -q cb6d357587e31fd69c58b57b41c1031981d4ae9f
        Resolved https://github.com/freebsd/iocage.git to commit cb6d357587e31fd69c58b57b41c1031981d4ae9f
        Installing build dependencies: started
        Installing build dependencies: finished with status 'done'
        Getting requirements to build wheel: started
        Getting requirements to build wheel: finished with status 'done'
        Preparing metadata (pyproject.toml): started
        Preparing metadata (pyproject.toml): finished with status 'error'
        error: subprocess-exited-with-error
      
        × Preparing metadata (pyproject.toml) did not run successfully.
        │ exit code: 1
        ╰─> [59 lines of output]
            /tmp/pip-install-cn7k9ak6/iocage_5913cdd155f844c7a58e9a93e0cdd32d/fastentrypoints.py:73: SetuptoolsDeprecationWarning: easy_install module is deprecated
            !!
      
                    ********************************************************************************
                    Avoid accessing attributes of setuptools.command.easy_install.
      
                    By 2025-Oct-31, you need to update your project and remove deprecated calls
                    or your builds will no longer be supported.
      
                    See https://github.com/pypa/setuptools/issues/4976 for details.
                    ********************************************************************************
      
            !!
              easy_install.ScriptWriter.get_args = get_args
            /tmp/pip-build-env-9va5p6b9/overlay/lib/python3.11/site-packages/setuptools/_distutils/dist.py:289: UserWarning: Unknown distribution option: 'tests_require'
              warnings.warn(msg)
            fastentrypoints
            running dist_info
            creating /tmp/pip-modern-metadata-d3hdmy7t/iocage_lib.egg-info
            writing /tmp/pip-modern-metadata-d3hdmy7t/iocage_lib.egg-info/PKG-INFO
            writing dependency_links to /tmp/pip-modern-metadata-d3hdmy7t/iocage_lib.egg-info/dependency_links.txt
            writing entry points to /tmp/pip-modern-metadata-d3hdmy7t/iocage_lib.egg-info/entry_points.txt
            writing requirements to /tmp/pip-modern-metadata-d3hdmy7t/iocage_lib.egg-info/requires.txt
            writing top-level names to /tmp/pip-modern-metadata-d3hdmy7t/iocage_lib.egg-info/top_level.txt
            writing manifest file '/tmp/pip-modern-metadata-d3hdmy7t/iocage_lib.egg-info/SOURCES.txt'
            reading manifest file '/tmp/pip-modern-metadata-d3hdmy7t/iocage_lib.egg-info/SOURCES.txt'
            adding license file 'LICENSE'
            writing manifest file '/tmp/pip-modern-metadata-d3hdmy7t/iocage_lib.egg-info/SOURCES.txt'
            creating '/tmp/pip-modern-metadata-d3hdmy7t/iocage_lib-1.10.dist-info'
            running dist_info
            creating /tmp/pip-modern-metadata-d3hdmy7t/iocage_cli.egg-info
            writing /tmp/pip-modern-metadata-d3hdmy7t/iocage_cli.egg-info/PKG-INFO
            writing dependency_links to /tmp/pip-modern-metadata-d3hdmy7t/iocage_cli.egg-info/dependency_links.txt
            writing entry points to /tmp/pip-modern-metadata-d3hdmy7t/iocage_cli.egg-info/entry_points.txt
            writing requirements to /tmp/pip-modern-metadata-d3hdmy7t/iocage_cli.egg-info/requires.txt
            writing top-level names to /tmp/pip-modern-metadata-d3hdmy7t/iocage_cli.egg-info/top_level.txt
            writing manifest file '/tmp/pip-modern-metadata-d3hdmy7t/iocage_cli.egg-info/SOURCES.txt'
            reading manifest file '/tmp/pip-modern-metadata-d3hdmy7t/iocage_cli.egg-info/SOURCES.txt'
            adding license file 'LICENSE'
            writing manifest file '/tmp/pip-modern-metadata-d3hdmy7t/iocage_cli.egg-info/SOURCES.txt'
            creating '/tmp/pip-modern-metadata-d3hdmy7t/iocage_cli-1.10.dist-info'
            Traceback (most recent call last):
              File "/home/ab/venvs/cage2jail/py3.11/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 389, in <module>
                main()
              File "/home/ab/venvs/cage2jail/py3.11/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 373, in main
                json_out["return_val"] = hook(**hook_input["kwargs"])
                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              File "/home/ab/venvs/cage2jail/py3.11/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 175, in prepare_metadata_for_build_wheel
                return hook(metadata_directory, config_settings)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              File "/tmp/pip-build-env-9va5p6b9/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 376, in prepare_metadata_for_build_wheel
                self._bubble_up_info_directory(metadata_directory, ".egg-info")
              File "/tmp/pip-build-env-9va5p6b9/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 345, in _bubble_up_info_directory
                info_dir = self._find_info_directory(metadata_directory, suffix)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              File "/tmp/pip-build-env-9va5p6b9/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 356, in _find_info_directory
                assert len(candidates) == 1, f"Multiple {suffix} directories found"
                       ^^^^^^^^^^^^^^^^^^^^
            AssertionError: Multiple .egg-info directories found
            [end of output]
      
        note: This error originates from a subprocess, and is likely not a problem with pip.
      error: metadata-generation-failed
      
      × Encountered error while generating package metadata.
      ╰─> See above for output.
      
      note: This is an issue with the package mentioned above, not pip.
      hint: See above for details.
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× pip subprocess to install backend dependencies did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

Manually trying to install dependency using the name @ URI syntax, i.e., pip install 'iocage @ git+https://github.com/freebsd/iocage.git@1.10' fails with similar errors.

FWIW, it seems that one .egg-info directory is generated for each top-level package (iocage_cli and iocage_lib). According to pypa/pip#8201, one setup.py creating two distribution packages is not supported.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions