我的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?
答案 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上工作。这让我想到了最后一点......我可以想到一些解决方法:
安装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并且不起作用。
这些是我到目前为止找到的解决方法。我希望有人发布一个真正的解决方案!
答案 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 中工作:
从 pyOpt 文件夹运行以下命令:
python setup.py install --compiler=mingw32
如果您尝试编译它,您可能需要先删除构建文件夹