pip が Cargo.toml の相対パスを解決してくれない

Python
スポンサーリンク

[追記]

This has been implemented and will be in pip 21.1. You can try the main branch with –use-feature=in-tree-build.
https://github.com/pypa/pip/issues/9819

だそうです。


困った。

状況としては setuptools-rust を使って相対パスで指定した Rust の dependencies がパスが存在しないとして処理されてしまう。

pip install . でインストールできなかったのだが、pip を使ってインストールすると、インストール前にそのパッケージが /tmp 以下のフォルダに一時的にコピーされてしまうことが原因のようだった。

poetry を使っていると全部 pip でインストールしようとしてしまうので、python setup.py install だと問題がないことでも困ってしまう。

とりあえず、自前の pip を作り直して解決。

diff --git a/src/pip/_internal/operations/prepare.py b/src/pip/_internal/operations/prepare.py
index 3d074f9f6..c871f2c11 100644
--- a/src/pip/_internal/operations/prepare.py
+++ b/src/pip/_internal/operations/prepare.py
@@ -547,10 +547,14 @@ class RequirementPreparer:
             local_file = None
         elif link.url not in self._downloaded:
             try:
-                local_file = unpack_url(
-                    link, req.source_dir, self._download,
-                    self.download_dir, hashes
-                )
+                if not link.is_existing_dir():
+                    local_file = unpack_url(
+                        link, req.source_dir, self._download,
+                        self.download_dir, hashes,
+                    )
+                else:
+                    req.source_dir = link.file_path
+                    local_file = None
             except NetworkConnectionError as exc:
                 raise InstallationError(
                     'Could not install requirement {} because of HTTP '

コメント

タイトルとURLをコピーしました