我想要创建我自己的Python包,它应该可以从包含setup.py的目录中使用pip install .进行pip安装。我还想使用scikit-build和CMake来使这段代码与将来可能的修改兼容,从而使它可以与Cython一起运行。
测试示例如下:
Directory structure
.
|_lib
| |_skbuild_test_lib
| | |_ CMakeLists.txt
| | |_ __init__.py
| | |_ lib.py
| |_ CMakeLists.txt
| |_ __init__.py
| |_ skbuild_test.py
|_ CMakeLists.txt
|_ main.py
|_ setup.py__init__.py文件都是空的,其他文件如下:
setup.py:
from skbuild import setup
setup(
name='skbuild_test',
version='0.0.1',
packages=['lib', 'lib.skbuild_test_lib'],
)main.py:
import skbuild_test
skbuild_test.hello_world()CMakeLists.txt:
cmake_minimum_required(VERSION 3.0.0)
project(skbuild_test VERSION 0.1.0)
add_subdirectory (lib)lib/CMakeLists.txt:
add_subdirectory (skbuild_test_lib)
install (FILES __init__.py DESTINATION skbuild_test)
install (FILES skbuild_test.py DESTINATION skbuild_test)lib/skbuild_test.py:
import lib
def hello_world():
print(lib.foo())lib/skbuild_test/CMakeLists.py:
install (FILES __init__.py DESTINATION skbuild_test)
install (FILES lib.py DESTINATION skbuild_test)lib/skbuild_test/lib.py:
def foo():
return 'Hello World!'具有这种结构的存储库可以在here中找到。
我试图实现的是让setup.py在lib文件夹中安装所有内容,然后让main.py文件能够运行。我运行python setup.py install时的代码抛出(在我的Windows10系统上)以下错误:
Traceback (most recent call last):
File "setup.py", line 6, in <module>
packages=['lib', 'lib.skbuild_test_lib'],
File "venv\lib\site-packages\skbuild\setuptools_wrap.py", line 625, in setup
cmake_source_dir, skbuild_kw['cmake_install_dir'])
File "venv\lib\site-packages\skbuild\setuptools_wrap.py", line 757, in _classify_installed_files
install_root, to_platform_path(path)))
skbuild.exceptions.SKBuildError:
CMake-installed files must be within the project root.
Project Root : skbuild_test\_skbuild\win-amd64-3.7\cmake-install
Violating File: skbuild_test\_skbuild\win-amd64-3.7\cmake-install\skbuild_test\__init__.py请注意,如果我改为运行命令pip install .,我不会得到任何错误,但是包没有正确安装,并且main.py将抛出错误。
发布于 2020-12-31 09:25:11
首先,我认为你把事情搞得太复杂了,也就是说,你没有cmake要构建的东西,那么为什么你一开始就使用scikit-build呢?
其次,我最近一直在使用cmake/scikit-build/other进行“测试”,并没有声称自己是这方面的专家,但我认为你的setup.py目标找错了方向。我的意思是,这不是setup.py的工作,相反,你可能应该使用cmake (尽管我不确定我是否明白这一点)。setup.py和cmake对安装都有自己的想法,并且在构建(某些东西)之后倾向于使用cmake install命令。
如果您想查看使用cython扩展的真实示例,可以查看此处:https://github.com/freepn/py-re2/tree/skbuild
发布于 2020-12-31 20:56:06
我想我设法找到了一种方法来让它发挥作用。要查看我的存储库的情况,可以查看solution branch中已经引用的CMakeLists.txt
https://stackoverflow.com/questions/65249702
复制相似问题