警告:无法找到“glpsol”可执行文件,这是求解器“glpk”所必需的。
我已成功安装glpk。我还将目录添加到我的路径变量中,以便可以全局调用执行文件。我从命令行测试了glpsol --help,并看到打印的帮助信息。
下面的线程说它应该能够工作,但遗憾的是,它没有。
任何想法?
solvername='glpk'
solverpath_folder='C:\\glpk\\w64' #does not need to be directly on c drive
solverpath_exe='C:\\glpk\\w64\\glpsol' #does not need to be directly on c drive
我曾经这样做:
sys.path.append(solverpath_folder)
solver=SolverFactory(solvername)
solver=SolverFactory(solvername,executable=solverpath_exe)
这对cbc和glpk都有效。不知道为什么这样可以(我真的没有做其他事情)。
版本:Python 2.7或Python 3.7(已测试),glpk 4.65
brew install glpk
安装glpk软件包对我有用。由于我使用Anaconda:
conda install -c conda-forge glpk
下面是相关代码,其中pyomo
6.2正在寻找glpsol
可执行文件。
https://github.com/Pyomo/pyomo/blob/568c6595a56570c6ea69c3ae3198b73b9f473abd/pyomo/common/fileutils.py#L288
def _path():
return (os.environ.get('PATH','') or os.defpath).split(os.pathsep)
解决PATH
问题有两个选项:
将可执行文件放在PATH中的一个可用文件夹中(推荐做法)。glpsol
可执行文件必须位于PATH系统环境变量中存在的某个文件夹中。在您的代码中使用print(os.environ['PATH'])
来查看可用的文件夹并将其放置在那里。
在运行时将文件夹添加到路径中。您可以静态地将其添加到系统PATH中,或者使用代码在运行时动态添加它(仅在脚本运行时):
GLPK_FOLDER_PATH = "path/to/glpk"
os.environ["PATH"] += os.pathsep + str(GLPK_FOLDER_PATH)
.venv
,我有一个安装过程,将必要的文件粘贴到.venv/Scripts
文件夹中的glpsol
可执行文件。因为当从虚拟环境调用Python时,该文件夹会自动添加到系统PATH
中,所以像Pyomo
这样的库可以找到它。我不必记得在运行时将文件夹添加到PATH中,每当我想使用Pyomo
时。阅读源代码此处建议您尝试:
from pyutilib.services import register_executable, registered_executable
register_executable(name='glpsol')
也许它会给一个线索
对于有相同问题的人,我发现了一个解决方法(并非真正的解决方案!)。我将所有glpk文件复制到C:/Python27目录中,然后(惊喜!)Python现在可以找到它们了。
在接受这个解决方案之前,我会继续等待真正的解决方案。
看起来你的 Python 安装没有处理设置路径变量。
正常的 Python 安装是为了查找额外模块而设置了一个分离的“PYTHONPATH”环境变量。还有一种选择是在 Windows 注册表中进行条目设置,或者(就像你已经提到的那样)将文件移动到 Python 主目录中,如果未设置“PYTHONHOME”,则相对于安装目录识别。
更多信息请参见 Python 文档 3.3.3。 https://docs.python.org/2/using/windows.html#finding-modules
我曾经遇到过同样的问题。我不知道这是否是一个解决方案
,但它确实让求解器工作了。
在下载Windows安装程序后,我将w64
文件夹中的所有文件复制并直接粘贴到我的Python工作目录中。
之后,我的Python代码就能找到求解器了。
注意:这是针对Python 3.4.3.4,Windows 8.1 64位
的。
我在Windows 10上遇到了同样的问题,原因是glpk安装在不同的conda环境中。以下是安装pyomo和glpk的完整步骤。
通过运行https://pyomo.readthedocs.io/en/latest/working_models.html中的“Repeated Solves”示例来测试安装。
说明(在anaconda提示符下运行)
conda create --name myenv
conda activate myenv
conda install -c conda-forge pyomo
conda install -c conda-forge pyomo.extras
conda install -c conda-forge glpk
从myenv运行spyder,以便找到所有内容
spyder activate myenv