python - 无法安装 nlopt python 模块
问题描述
我正在尝试将 nlopt 安装到 macOS 10.15.5 上。我从NLopt 文档下载了nlopt-2.6.2.tar.gz 文件,并从 nlopt-2.6.2 目录运行以下内容:
mkdir build
cd build
cmake -DNLOPT_OCTAVE=Off -DNLOPT_MATLAB=Off -DNLOPT_GUILE=Off ..
make
sudo make install
我得到以下输出:cmake.txt。
头文件 ( nlopt.h
) 正确安装到/usr/local/include
,动态库 ( libnlopt.dylib
) 正确安装到/usr/local/lib/
,但 dist-info 文件和 nlopt 模块本身都没有安装。
我也尝试过通过 pip、brew 和 conda 安装,但都没有奏效。我也试过从这个 Github 克隆,但也没有用。
我很感激这方面的任何帮助,因为我完全迷路了。我对这种东西比较陌生,我在网上找不到任何好的答案。
解决方案
nlopt
官方文档对使用 Python 绑定构建所需的确切步骤有些简洁。首先,您需要安装 SWIG:
$ brew install swig
然后,您需要numpy
可用于目标 Python 解释器。它已经为系统 Python 预安装,否则通过 Homebrew 或 安装pip
,具体取决于您的 Python 安装。
现在运行cmake
:
$ cmake -DNLOPT_GUILE=OFF -DNLOPT_MATLAB=OFF -DNLOPT_OCTAVE=OFF -DNLOPT_TESTS=OFF
这将针对 MacOS 上预装的默认 Python 2.7 安装构建绑定。如果您需要针对自定义 Python 安装进行构建(例如,当您通过 Homebrew 或来自https://www.python.org/downloads的 PKG 安装程序安装 Python 3 时),请通过PYTHON_EXECUTABLE
arg 传递它:
$ cmake -DNLOPT_GUILE=OFF -DNLOPT_MATLAB=OFF -DNLOPT_OCTAVE=OFF -DNLOPT_TESTS=OFF -DPYTHON_EXECUTABLE=/usr/local/bin/python3
现在检查日志 - Python、SWIG 和numpy
标头应该已成功定位。示例输出片段(您可能打印了不同的路径/版本):
-- Found PythonInterp: /usr/local/bin/python3.8 (found version "3.8.3")
-- Found PythonLibs: /Library/Frameworks/Python.framework/Versions/3.8/lib/libpython3.8.dylib (found suitable exact version "3.8.3")
-- Found NumPy: /Users/hoefling/Library/Python/3.8/lib/python/site-packages/numpy/core/include (found version "1.19")
-- Found SWIG: /usr/local/bin/swig (found version "4.0.2")
如果其中任何一个条件不满足(例如,您看到Could NOT find NumPy
或 Could NOT find PythonLibs
)Could NOT find SWIG
,则停止并确保配置成功,然后再继续下一步。
现在编译:
$ make
...
Scanning dependencies of target nlopt_python_swig_compilation
[ 96%] Swig compile nlopt.i for python
[ 96%] Built target nlopt_python_swig_compilation
Scanning dependencies of target nlopt_python
[ 98%] Building CXX object src/swig/CMakeFiles/nlopt_python.dir/CMakeFiles/nlopt_python.dir/nloptPYTHON_wrap.cxx.o
[100%] Linking CXX shared module _nlopt.so
[100%] Built target nlopt_python
安装:
$ make install
...
-- Installing: /usr/local/lib/python3.8/site-packages/nlopt.py
-- Installing: /usr/local/lib/python3.8/site-packages/_nlopt.so
测试 Python 绑定是否可导入:
$ python -c "import nlopt; print(nlopt.__version__)"
2.6.2
推荐阅读
- ios - UICollectionViewCompositionLayout 与包含固定比例 UIImageView 的自动调整单元格
- c# - 如何将 cmd 行参数传递给已发布的 ClickOnce .NET Framework 控制台应用程序
- arrays - 此结构数组中最后一项的意义
- html - 当您将鼠标悬停在图像的不同部分时如何使不同的抽认卡出现
- c# - Xamarin 表单 - 通知服务
- xslt - 如果元素的内容匹配,则使用 XSLT 将 XML 文件拆分为多个文件
- css - 当我运行 VSCode 的 sass 实时编译器时,我如何获取 CSS 文件夹?
- azure - 用于运行节点 js 命令的 azure 命令行脚本
- javascript - JavaScript异步等待顺序不起作用,它没有等待响应
- java - this.openOrCreateDatabase() 和 SQLiteDatabase.openOrCreateDatabase() 之间的区别