运行 pip install 两次以查看更改 ("developer mode") -- 第二次安装失败但第一次安装成功
Running pip install twice to see changes ("developer mode") -- second install fails but first works
我想知道如何使用 pip 开发一个 Python 包,该包正在快速进行许多修订。我的工作流程是编写 C++ 代码,使用 pip install
编译和安装并测试我的代码。
然后,我想更改一些底层 C++ 代码,重新编译并使用 pip 重新安装,测试新功能,更改其他内容,返回等等,直到我的包准备就绪。
为什么pip install ./cmake_example
第一次用的很好,改代码的时候,重新安装重新编译就报错了?我只是重新 运行 命令 pip install ./cmake_example
.
我以一种无害的方式更改了一行 C++ 代码(在 'add' 函数中添加 +1 只是为了看看我是否可以更改代码并重新编译)并且代码在我的 IDE 没有 pip。
我的基本想法是在 之后使用 pip
以避免每次我进行更改时不得不将我的共享对象 hackishly 插入到某个 python 目录中。
我使用了 pybind here 中的 cmake_example 并按照步骤进行了 pip install ./cmake_example
并且效果很好。我 运行 这个例子在 Python 控制台中很好。
然后,我更改了一些代码(只是在添加函数中添加了 +1),所以没什么实质性的,想要 re-install
包。
然后我得到这个错误:
Building wheels for collected packages: cmake-example
Building wheel for cmake-example (pyproject.toml) ... error
error: subprocess-exited-with-error
× Building wheel for cmake-example (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [65 lines of output]
running bdist_wheel
running build
running build_ext
CMake Error at CMakeLists.txt:2 (project):
Running
'/tmp/pip-build-env-q_8_pyjk/overlay/bin/ninja' '--version'
failed with:
No such file or directory
和
ERROR: Could not build wheels for cmake-example, which is required to
install pyproject.toml-based projects
我试过 pip uninstall cmake_example
然后重新安装,但无济于事。 upgrade
函数也不起作用。 pip 是否更改了项目文件夹中的某些内容?
PS: pybind11 的制造商还提供了一个 scikit 示例 here,其中不需要为重复构建删除缓存。 cmake_example
似乎适用于不使用 cmake 扩展 scikit 的遗留项目。因此,如果 cmake_example
的结构对项目至关重要,那么删除缓存是唯一的方法。
我发现删除 cmake_example
目录中的 build
目录解决了问题,并且 pip install ./cmake_example
再次像第一次一样工作。您可以组合这两个命令:
rm -rf ./cmake_example/build && pip install ./cmake_example
仔细看,(对我来说)删除cmake_example/temp.linux-x86_64-3.8/CMakeCache.txt
就足够了。我怀疑线条
//Program used to build from build.ninja files.
CMAKE_MAKE_PROGRAM:FILEPATH=/tmp/pip-build-env-yqopewjn/overlay/bin/ninja
inside CMakeCache.txt
意味着 cmake
缓存了 ninja 可执行文件的路径,但是第二次临时路径不同,所以再也找不到 cmake
期待它。
我想知道如何使用 pip 开发一个 Python 包,该包正在快速进行许多修订。我的工作流程是编写 C++ 代码,使用 pip install
编译和安装并测试我的代码。
然后,我想更改一些底层 C++ 代码,重新编译并使用 pip 重新安装,测试新功能,更改其他内容,返回等等,直到我的包准备就绪。
为什么pip install ./cmake_example
第一次用的很好,改代码的时候,重新安装重新编译就报错了?我只是重新 运行 命令 pip install ./cmake_example
.
我以一种无害的方式更改了一行 C++ 代码(在 'add' 函数中添加 +1 只是为了看看我是否可以更改代码并重新编译)并且代码在我的 IDE 没有 pip。
我的基本想法是在 pip
以避免每次我进行更改时不得不将我的共享对象 hackishly 插入到某个 python 目录中。
我使用了 pybind here 中的 cmake_example 并按照步骤进行了 pip install ./cmake_example
并且效果很好。我 运行 这个例子在 Python 控制台中很好。
然后,我更改了一些代码(只是在添加函数中添加了 +1),所以没什么实质性的,想要 re-install
包。
然后我得到这个错误:
Building wheels for collected packages: cmake-example
Building wheel for cmake-example (pyproject.toml) ... error
error: subprocess-exited-with-error
× Building wheel for cmake-example (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [65 lines of output]
running bdist_wheel
running build
running build_ext
CMake Error at CMakeLists.txt:2 (project):
Running
'/tmp/pip-build-env-q_8_pyjk/overlay/bin/ninja' '--version'
failed with:
No such file or directory
和
ERROR: Could not build wheels for cmake-example, which is required to
install pyproject.toml-based projects
我试过 pip uninstall cmake_example
然后重新安装,但无济于事。 upgrade
函数也不起作用。 pip 是否更改了项目文件夹中的某些内容?
PS: pybind11 的制造商还提供了一个 scikit 示例 here,其中不需要为重复构建删除缓存。 cmake_example
似乎适用于不使用 cmake 扩展 scikit 的遗留项目。因此,如果 cmake_example
的结构对项目至关重要,那么删除缓存是唯一的方法。
我发现删除 cmake_example
目录中的 build
目录解决了问题,并且 pip install ./cmake_example
再次像第一次一样工作。您可以组合这两个命令:
rm -rf ./cmake_example/build && pip install ./cmake_example
仔细看,(对我来说)删除cmake_example/temp.linux-x86_64-3.8/CMakeCache.txt
就足够了。我怀疑线条
//Program used to build from build.ninja files.
CMAKE_MAKE_PROGRAM:FILEPATH=/tmp/pip-build-env-yqopewjn/overlay/bin/ninja
inside CMakeCache.txt
意味着 cmake
缓存了 ninja 可执行文件的路径,但是第二次临时路径不同,所以再也找不到 cmake
期待它。