如何在Windows上的Python中安装优化包pyOpt

时间:2015-11-27 11:46:53

标签: python windows optimization installation

我的Windows 7笔记本电脑上安装了Anaconda Pack for Python。

我按照以下说明执行了所有安装步骤: http://www.pyopt.org/install.html#installation

经过一些试验和错误后,我可以使用以下命令安装pyOpt:

python setup.py install --compiler=mingw32

但是,我仍然无法运行最简单的教程示例.. http://www.pyopt.org/tutorial.html

..可能是因为安装中缺少优化器SLSQP。运行教程示例时,我收到以下错误消息:

slsqp = pyOpt.SLSQP()
AttributeError: 'module' object has no attribute 'SLSQP'

如何在Windows上使用优化器等完全安装pyOpt?

4 个答案:

答案 0 :(得分:2)

我将以此为序:我对我正在做的事情知之甚少......

我也被困在这一段很长一段时间了。我觉得它与安装过程中如何构建模块有关。我认为pyOpt模块都指向fortran和c库,当你运行时它们被“翻译”为python

python setup.py install --compiler=mingw32

我一直在使用不同的编译器和命令环境(管理员权限,powershell,cygwin等)无济于事。 msvc编译器在某一点失败。 Cygwin,MinGW32,IntelEM,所有编译但在运行实际示例时会产生相同的错误。

如果您查看C:\ PathToPython \ Lib \ site-packages \ pyOpt \文件夹,您将看到包含所有模块的文件夹。当您调用import时,您正在导入这些模块...所以输入以下内容(例如......我认为):

from pyOpt import pySNOPT

你或多或少地指示导入导航文件夹以找到pySNOPT并导入它......我想。您会注意到在\ pyOpt \ pySNOPT \中有一个文件pySNOPT.py。导入时,使用pyOpt导入SNOPT 中的,它在pyOpt中查找SNOPT.py ...但你会发现(如python所示)没有要导入的文件。相反,只有pySNOPT.py。知道了这一点,我们希望以下方法来解决问题:

from pyOpt.pySNOPT import pySNOPT

但是,这也失败了。这次产生导入错误,指出“SNOPT共享库无法导入”(这是一个非常大的线索,我怀疑)。

如果你打开pySNOPT.py(可以用任何其他解算器的首字母缩略词替换)文件,你会看到熟悉的python模块格式盯着你。所有这些文件的第一行如下:

try:
    import snopt
except ImportError:
    raise ImportError('SNOPT shared library failed to import')

这是发生故障的地方。 “import snopt”行应该加载snopt.dll(snopt.so,snopt.a用于Linux,Unix)。运行setup.py时,如果我使用cygwin环境,它会在每个C:\ PathToCygwinDrive \ lib \ python2.7 \ site-packages \ pyOpt \ pyACRONYM文件夹中创建DLL。这些DLL似乎没有放在与我告诉PyCharm使用的Python版本相对应的位置(c:\ PathToPython \ Lib \ site-packages \ pyOpt \ pyACRONYM)。我在其他环境中使用了所有编译器(包括cygwin)(PowerShell,Visual C ++ 2008 64位命令提示符,任何其他命令提示符)。简单地将DLL从Cygwin pyOpt文件夹复制并粘贴到常规Python pyOpt文件夹不起作用。我不知道是否有一种必须导入DLL的特殊方式。阅读构建C扩展并将它们链接到python项目已经超出了我的想象并且过于繁琐。

我认为这是我的计算机本地的(因为一个小组成员设法使他的安装工作)但是当在另一个组成员的计算机上进行设置时,我遇到了完全相同的错误。

需要注意的一件重要事情......我正在做x64架构中的所有事情(就像我试图帮助的团队成员一样,但也被困在这里)。这可能是解决这个问题的真正秘诀。也许有太多的箍要跳过来让pyOpt在64位Python上工作。这让我想到了最后一点......我可以想到一些解决方法:

  1. 安装32位Python,重启过程。
  2. 安装Spyder IDE(通过anaconda或其他东西),然后使用以下命令安装pyOpt:

    conda install --channel https://conda.anaconda.org/melund pyopt
    

    conda install --channel https://conda.anaconda.org/mutirri pyopt
    

    (两者都适用于x64窗口) 请勿使用默认的conda pyOpt(conda install pyopt),因为这是版本0.84并且不起作用。

  3. 切换到Linux(因为使用linux进行编程就像使用带有肛门的润滑剂......你可以让它在没有它的情况下工作......但是一切都会更加痛苦)
  4. 这些是我到目前为止找到的解决方法。我希望有人发布一个真正的解决方案!

答案 1 :(得分:0)

我成功在Anaconda上的Win64上安装了pyOpt。方法如下:

可以使用上面评论中的命令从mutirri频道安装pyOpt 1.2:

conda install --channel https://conda.anaconda.org/mutirri pyopt

安装几乎顺利进行。唯一的例外是它要求安装Microsoft MPI包以使pyOpt正常工作(这很简单:只需转到https://www.microsoft.com/en-us/download/details.aspx?id=49926并下载最新的安装程序。)

但是,当我们尝试为pyOpt运行一些测试脚本时,尝试使用SLSQP解算器失败。惊喜!因此,需要进行一些研究。

如果我们将Lib\site-packages\pyOpt\pySLSQP\slsqp.pyd文件加载到Dependency Walker中,我们可以看到LIBGFORTRAN-3.DLL文件丢失。

Quik谷歌搜索显示LIBGFORTRAN-3.DLL文件与MinGW64捆绑在一起。因此,我们需要使用安装程序从这里下载并安装MinGW64:

https://sourceforge.net/projects/mingw-w64/files/mingw-w64/

然后在LIBGFORTRAN-3.DLL文件夹中找到mingw64\bin并将所有 DLL从此文件夹中的某处复制到PATH中(我刚刚将所有mingw64 DLL复制到C:\Anaconda2\Library\bin

现在SLSQP求解器有效!

答案 2 :(得分:0)

在Windows上使用pyOpt时,我遇到了类似的问题,我无法使用任何用fortran编写的pyOpt库。上述解决方案对我不起作用,因此我在此处添加自己的答案,希望对您有所帮助:

安装这些库:

conda install libpython
conda install -c msys2 m2w64-toolchain

检查fortran编译器是否可用:

f2py -c --help-fcompiler

您可以安装一个:

conda install -c conda-forge fortran-compiler

删除或卸载任何较早版本的pyOpt

https://github.com/madebr/pyOpt下载pyOpt-master

转到相应的文件夹,然后尝试在anaconda提示符下运行以下行:

python setup.py install --compiler=mingw32

如果无法识别--compiler选项,请尝试运行以下行:

python setup.py build --compiler=mingw32
python setup.py install

如果它不起作用,请尝试以下操作:

进入以下目录(或等效目录):C:\ Users ... \ Anaconda3 \ Lib \ distutils

打开或创建文件distutils.cfg

(如果您有记事本,可以使用以下行来完成,它将创建并打开文件):

notepad distutils.cfg

在distutils.cfg中添加以下两行:

[build]           
compiler=mingw32.exe

然后返回pyOpt主目录并在anaconda提示符下运行以下行:

python setup.py build --compiler=mingw32

如果有效:

在distutils.cfg中,删除“ .exe”,因此您具有以下两行:

[build]           
compiler=mingw32

并运行以下行:

python setup.py install

如果一切顺利,pyOpt应该已经出现在您想要的位置(在我的情况下,是C:\ Users ... \ Anaconda3 \ Lib \ site-packages)。 您可以尝试运行python examples \ parallel_gradient.py或任何其他示例来查看它是否有效。

我认为它应该做,但是我之前做过的其他事情可能是必要的:

如果这不起作用,请尝试以下操作:

如果您已经安装了带有conda的mingGW,请将其卸载,我认为您可以使用以下方法做到这一点:

conda uninstall -c anaconda MinGW

下载mingw-w64的最新版本:http://mingw-w64.org/doku.php/download/mingw-builds

在Anaconda3 \ DLL中,您可以放置​​:

libatomic-1.dll

libgcc_s_seh-1.dll

libgfortran-3.dll

libcomp-1.dll

libquadmath-0.dll

libssp-0.dll

libstdc ++-6.dll

libwinpthread-1.dll

已经有一个,从互联网上下载了libfortran-3.dll,其余的是从minGW-w64复制的

(我在C:\ Program Files \ mingw-w64 \ x86_64-8.1.0-posix-seh-rt_v6-rev0 \ mingw64 \ bin中找到了它们

该路径取决于minGW-w64的安装位置,并且可能取决于您的版本。将所有DLL复制到sys.path可以访问的位置(对我来说Anaconda3 \ DLLs)。

答案 3 :(得分:0)

我使用 64 位 Python 3 让它在 Windows 中工作:

  • 解压 swigwin 并添加到环境变量
  • 解压 wingw-w64 并添加到环境变量中,放在最开始的位置

从 pyOpt 文件夹运行以下命令:

python setup.py install --compiler=mingw32 

如果您尝试编译它,您可能需要先删除构建文件夹