ishepard / pydriller

Python Framework to analyse Git repositories
http://pydriller.readthedocs.io/en/latest/
Apache License 2.0
814 stars 139 forks source link

Failed to install pydriller from sources #293

Open n-bes opened 4 days ago

n-bes commented 4 days ago

Minimal reproducible example

Dockerfile:

FROM debian:12
ENV DEBIAN_FRONTEND="noninteractive" \
    POETRY_VERSION="1.8.3" \
    POETRY_HOME="/opt/poetry"
RUN apt-get update -y && \
    apt-get install -y \
        gcc \
        curl \
        python3-venv \
        python3-pip \
        python3-dev
ENV PATH=/root/.cargo/bin:/opt/poetry/bin:$PATH
RUN curl -sSL https://install.python-poetry.org | python3 - \
    && poetry config virtualenvs.create false
COPY pyproject.toml .
RUN python3 -m venv /venv && . /venv/bin/activate && \
    poetry lock
COPY poetry.toml .

Minimal reproducible example. PyDriller 1.5

poetry.toml:

[installer]
no-binary = [
    "gitdb",
    "gitpython",
    "lizard",
    "pydriller",
    "pytz",
    "smmap",
]

pyproject.toml:

[tool.poetry]
name = "hello-pydriller"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]

[tool.poetry.dependencies]
python = ">=3.10,<3.13"
pydriller="1.15.5"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

Minimal reproducible example. PyDriller 1.15.5. Poetry

$ docker build .
$ docker run --rm -it ...
$ source venv/bin/activate
$ poetry install --no-root
Installing dependencies from lock file

Package operations: 6 installs, 0 updates, 0 removals

  - Installing smmap (5.0.1)
  - Installing gitdb (4.0.11)
  - Installing gitpython (3.1.43)
  - Installing lizard (1.17.10)
  - Installing pytz (2024.1)
  - Installing pydriller (1.15.5): Failed

  RuntimeError

  Unable to find installation candidates for pydriller (1.15.5)

  at /opt/poetry/venv/lib/python3.11/site-packages/poetry/installation/chooser.py:74 in choose_for
       70│
       71│             links.append(link)
       72│
       73│         if not links:
    →  74│             raise RuntimeError(f"Unable to find installation candidates for {package}")
       75│
       76│         # Get the best link
       77│         chosen = max(links, key=lambda link: self._sort_key(package, link))
       78│

Cannot install pydriller.

Minimal reproducible example. PyDriller 1.15.2. Poetry

$ docker build .
$ docker run --rm -it ...
$ source venv/bin/activate
$ poetry install --no-root
Installing dependencies from lock file

Package operations: 6 installs, 0 updates, 0 removals

  - Installing smmap (5.0.1)
  - Installing gitdb (4.0.11)
  - Installing gitpython (3.1.43)
  - Installing lizard (1.17.10)
  - Installing pytz (2024.1)
  - Installing pydriller (1.15.2): Failed

  ChefBuildError

  Backend subprocess exited when trying to invoke get_requires_for_build_wheel

  Traceback (most recent call last):
    File "/opt/poetry/venv/lib/python3.11/site-packages/pyproject_hooks/_in_process/_in_process.py", line 373, in <module>
      main()
    File "/opt/poetry/venv/lib/python3.11/site-packages/pyproject_hooks/_in_process/_in_process.py", line 357, in main
      json_out["return_val"] = hook(**hook_input["kwargs"])
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/opt/poetry/venv/lib/python3.11/site-packages/pyproject_hooks/_in_process/_in_process.py", line 134, in get_requires_for_build_wheel
      return hook(config_settings)
             ^^^^^^^^^^^^^^^^^^^^^
    File "/tmp/tmpalc04bft/.venv/lib/python3.11/site-packages/setuptools/build_meta.py", line 327, in get_requires_for_build_wheel
      return self._get_build_requires(config_settings, requirements=[])
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/tmp/tmpalc04bft/.venv/lib/python3.11/site-packages/setuptools/build_meta.py", line 297, in _get_build_requires
      self.run_setup()
    File "/tmp/tmpalc04bft/.venv/lib/python3.11/site-packages/setuptools/build_meta.py", line 497, in run_setup
      super().run_setup(setup_script=setup_script)
    File "/tmp/tmpalc04bft/.venv/lib/python3.11/site-packages/setuptools/build_meta.py", line 313, in run_setup
      exec(code, locals())
    File "<string>", line 4, in <module>
  FileNotFoundError: [Errno 2] No such file or directory: 'requirements.txt'

  at /opt/poetry/venv/lib/python3.11/site-packages/poetry/installation/chef.py:164 in _prepare
      160│
      161│                 error = ChefBuildError("\n\n".join(message_parts))
      162│
      163│             if error is not None:
    → 164│                 raise error from None
      165│
      166│             return path
      167│
      168│     def _prepare_sdist(self, archive: Path, destination: Path | None = None) -> Path:

Note: This error originates from the build backend, and is likely not a problem with poetry but with pydriller (1.15.2) not supporting PEP 517 builds. You can verify this by running 'pip wheel --no-cache-dir --use-pep517 "pydriller (==1.15.2)"'.

Minimal reproducible example. PyDriller 1.15. pip

$ docker build .
$ docker run --rm -it ...
$ source venv/bin/activate
$ pip3 install --no-binary ":all:" pydriller=="1.15.5"
DEPRECATION: --no-binary currently disables reading from the cache of locally built wheels. In the future --no-binary will not influence the wheel cache. pip 23.1 will enforce this behaviour change. A possible replacement is to use the --no-cache-dir option. You can use the flag --use-feature=no-binary-enable-wheel-cache to test the upcoming behaviour. Discussion can be found at https://github.com/pypa/pip/issues/11453
ERROR: Could not find a version that satisfies the requirement pydriller==1.15.5 (from versions: 1.0, 1.1, 1.2, 1.2.1, 1.2.2, 1.2.3, 1.3, 1.4, 1.4.1, 1.4.2, 1.4.3, 1.5, 1.5.1, 1.6, 1.6.1, 1.6.2, 1.6.3, 1.7, 1.8, 1.9, 1.9.1, 1.9.2, 1.10, 1.10.1, 1.11, 1.11.1, 1.11.2, 1.12, 1.13, 1.14, 1.15, 1.15.1, 1.15.2)
ERROR: No matching distribution found for pydriller==1.15.5

$ pip3 install --no-binary ":all:" pydriller=="1.15.2"
DEPRECATION: --no-binary currently disables reading from the cache of locally built wheels. In the future --no-binary will not influence the wheel cache. pip 23.1 will enforce this behaviour change. A possible replacement is to use the --no-cache-dir option. You can use the flag --use-feature=no-binary-enable-wheel-cache to test the upcoming behaviour. Discussion can be found at https://github.com/pypa/pip/issues/11453
Collecting pydriller==1.15.2
  Downloading PyDriller-1.15.2.tar.gz (39 kB)
  Preparing metadata (setup.py) ... error
  error: subprocess-exited-with-error

  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [7 lines of output]
      Traceback (most recent call last):
        File "<string>", line 2, in <module>
        File "<pip-setuptools-caller>", line 34, in <module>
        File "/tmp/pip-install-_8lymkz3/pydriller_beb673ec222a49418a948c1ef98ee9fa/setup.py", line 4, in <module>
          with open('requirements.txt') as reqs_file:
               ^^^^^^^^^^^^^^^^^^^^^^^^
      FileNotFoundError: [Errno 2] No such file or directory: 'requirements.txt'
      [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.

Minimal reproducible example. PyDriller 2.6

pyproject.toml:

[tool.poetry]
name = "hello-pydriller"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]

[tool.poetry.dependencies]
python = ">=3.10,<3.13"
pydriller="2.6"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

poetry.toml:

[installer]
no-binary = [
    "gitdb",
    "gitpython",
    "lizard",
    "pydriller",
    "pytz",
    "smmap",
    "types-pytz"
]

Minimal reproducible example. PyDriller 2.6. poetry

$ docker build .
$ docker run --rm -it ...
$ source venv/bin/activate
$ poetry install --no-root
Installing dependencies from lock file

Package operations: 7 installs, 0 updates, 0 removals

  - Installing smmap (5.0.1)
  - Installing gitdb (4.0.11)
  - Installing gitpython (3.1.43)
  - Installing lizard (1.17.10)
  - Installing pytz (2024.1)
  - Installing types-pytz (2024.1.0.20240417)
  - Installing pydriller (2.6): Failed

  RuntimeError

  Unable to find installation candidates for pydriller (2.6)

  at /opt/poetry/venv/lib/python3.11/site-packages/poetry/installation/chooser.py:74 in choose_for
       70│
       71│             links.append(link)
       72│
       73│         if not links:
    →  74│             raise RuntimeError(f"Unable to find installation candidates for {package}")
       75│
       76│         # Get the best link
       77│         chosen = max(links, key=lambda link: self._sort_key(package, link))
       78│

Cannot install pydriller.

Minimal reproducible example. PyDriller 2.6. pip

$ docker build .
$ docker run --rm -it ...
$ source venv/bin/activate
$ pip3 install --no-binary ":all:" pydriller=="2.6"
DEPRECATION: --no-binary currently disables reading from the cache of locally built wheels. In the future --no-binary will not influence the wheel cache. pip 23.1 will enforce this behaviour change. A possible replacement is to use the --no-cache-dir option. You can use the flag --use-feature=no-binary-enable-wheel-cache to test the upcoming behaviour. Discussion can be found at https://github.com/pypa/pip/issues/11453
ERROR: Could not find a version that satisfies the requirement pydriller==2.6 (from versions: 1.0, 1.1, 1.2, 1.2.1, 1.2.2, 1.2.3, 1.3, 1.4, 1.4.1, 1.4.2, 1.4.3, 1.5, 1.5.1, 1.6, 1.6.1, 1.6.2, 1.6.3, 1.7, 1.8, 1.9, 1.9.1, 1.9.2, 1.10, 1.10.1, 1.11, 1.11.1, 1.11.2, 1.12, 1.13, 1.14, 1.15, 1.15.1, 1.15.2)
ERROR: No matching distribution found for pydriller==2.6
ishepard commented 3 days ago

I'm not super familiar with Poetry, I always wanted to try it but never had the chance, maybe now it's a good time! 😄

If I look at pip, I can install it from source:

❯ pip install -e /Users/dspadini/Documents/pydriller
Obtaining file:///Users/dspadini/Documents/pydriller
  Installing build dependencies ... done
  Checking if build backend supports build_editable ... done
  Getting requirements to build editable ... done
  Preparing editable metadata (pyproject.toml) ... done
Collecting gitpython (from PyDriller==2.6)
  Using cached GitPython-3.1.43-py3-none-any.whl.metadata (13 kB)
Collecting pytz (from PyDriller==2.6)
  Using cached pytz-2024.1-py2.py3-none-any.whl.metadata (22 kB)
Collecting types-pytz (from PyDriller==2.6)
  Using cached types_pytz-2024.1.0.20240417-py3-none-any.whl.metadata (1.5 kB)
Collecting lizard (from PyDriller==2.6)
  Using cached lizard-1.17.10-py2.py3-none-any.whl.metadata (15 kB)
Collecting gitdb<5,>=4.0.1 (from gitpython->PyDriller==2.6)
  Using cached gitdb-4.0.11-py3-none-any.whl.metadata (1.2 kB)
Collecting smmap<6,>=3.0.1 (from gitdb<5,>=4.0.1->gitpython->PyDriller==2.6)
  Using cached smmap-5.0.1-py3-none-any.whl.metadata (4.3 kB)
Using cached GitPython-3.1.43-py3-none-any.whl (207 kB)
Using cached lizard-1.17.10-py2.py3-none-any.whl (66 kB)
Using cached pytz-2024.1-py2.py3-none-any.whl (505 kB)
Using cached types_pytz-2024.1.0.20240417-py3-none-any.whl (5.2 kB)
Using cached gitdb-4.0.11-py3-none-any.whl (62 kB)
Using cached smmap-5.0.1-py3-none-any.whl (24 kB)
Building wheels for collected packages: PyDriller
  Building editable for PyDriller (pyproject.toml) ... done
  Created wheel for PyDriller: filename=PyDriller-2.6-0.editable-py3-none-any.whl size=6884 sha256=ede912dd26eb3b2831acd929fff4e900b0f586ac970f36c5b83cb85ebaaa394d
  Stored in directory: /private/var/folders/39/qht51vsx1z12ydvwdp47m50m0000gn/T/pip-ephem-wheel-cache-7dk2zx8h/wheels/3d/70/5d/99d4abf3b226f4e173d29a76d219bc05e95c264811abcadd82
Successfully built PyDriller
Installing collected packages: pytz, lizard, types-pytz, smmap, gitdb, gitpython, PyDriller
Successfully installed PyDriller-2.6 gitdb-4.0.11 gitpython-3.1.43 lizard-1.17.10 pytz-2024.1 smmap-5.0.1 types-pytz-2024.1.0.20240417

[notice] A new release of pip is available: 24.0 -> 24.1.1
[notice] To update, run: pip install --upgrade pip
n-bes commented 3 days ago

I'm not super familiar with Poetry

It also failed with pip

I can install it from source:

pip install -e /Users/dspadini/Documents/pydriller - May be publish to PyPi process is broken

ishepard commented 3 days ago

Can you try locally (not in Docker) to install it? What errors do you get?

n-bes commented 3 days ago

Can you try locally (not in Docker) to install it? What errors do you get?

Same errors on MacOS (arm-based)

Снимок экрана 2024-06-27 в 19 03 07