所以我正在用python 3.6运行时创建一个Docker容器。我需要python的lp_solver(http://lpsolve.sourceforge.net/5.5/index.htm)的UX64版本。链接的一个是python 2.7。我发现了以下内容:https://github.com/chandu-atina/lp_solve_python_3x但它也不起作用。尝试了两种方法。我真的不知道如何使此lp_solver在Ubuntu Python 3.6上运行。是否存在以下内容:https://www.lfd.uci.edu/~gohlke/pythonlibs/#lp_solve,但对于Ubuntu?

还发现了这一点,它起作用:https://anaconda.org/snorfalorpagus/lpsolve
但是我不能导入lpsolve。 (这是链接导入lpsolve的问题:Conda installation of lpsolve)

编辑1:

这是我要采取的步骤:

mkdir -p /tmp/lp_solve && cd /tmp/lp_solve

wget -O ./lp_solve.tar.gz http://sourceforge.net/projects/lpsolve/files/lpsolve/5.5.2.0/lp_solve_5.5.2.0_source.tar.gz/download

tar -xf lp_solve.tar.gz

DOWNLOAD THE REPO FROM GITHUB  (https://github.com/chandu-atina/lp_solve_python_3x )

mkdir -p /tmp/lp_solve/lp_solve_5.5/extra/

//创建Python目录!只要确保来源是多余的/Python
cp -R extra/Python_that_is_downloaded  /tmp/lp_solve/lp_solve_5.5/extra/

cd /tmp/lp_solve/lp_solve_5.5/lpsolve55

chmod a+x ccc

sh ccc

sh ccc上,.h文件中出现大量语法错误。
这里:
user@user-box:/tmp/lp_solve/lp_solve_5.5/lpsolve55$ sh ccc
/tmp/platform.c:3:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
 main(){printf("ux%d", (int) (sizeof(void *)*8));}
 ^
In file included from ../lp_MDO.c:22:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_crash.c:21:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_lib.c:41:0:
../lp_lib.h:63:0: warning: "isnan" redefined
 # define isnan(x) FALSE
 ^
In file included from ../lp_lib.c:27:0:
/usr/include/math.h:292:0: note: this is the location of the previous definition
 #  define isnan(x) __builtin_isnan (x)
 ^
In file included from ../lp_wlp.c:6:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_matrix.c:3:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_mipbb.c:30:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_MPS.c:5:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_params.c:6:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_presolve.c:36:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_price.c:3:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_pricePSE.c:3:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_scale.c:3:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_simplex.c:27:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_SOS.c:3:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_utils.c:4:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
ar: lp_MDO.o: No such file or directory
In file included from ../lp_MDO.c:22:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_crash.c:21:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_lib.c:41:0:
../lp_lib.h:63:0: warning: "isnan" redefined
 # define isnan(x) FALSE
 ^
In file included from ../lp_lib.c:27:0:
/usr/include/math.h:292:0: note: this is the location of the previous definition
 #  define isnan(x) __builtin_isnan (x)
 ^
In file included from ../lp_wlp.c:6:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_matrix.c:3:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_mipbb.c:30:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_MPS.c:5:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_params.c:6:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_presolve.c:36:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_price.c:3:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_pricePSE.c:3:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_scale.c:3:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_simplex.c:27:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_SOS.c:3:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
In file included from ../lp_utils.c:4:0:
../shared/commonlib.h:88:24: error: expected identifier or ‘(’ before numeric constant
   #define FALSE        0
                        ^
cc: error: lp_MDO.o: No such file or directory
cc: error: lp_crash.o: No such file or directory
cc: error: lp_wlp.o: No such file or directory
cc: error: lp_matrix.o: No such file or directory
cc: error: lp_mipbb.o: No such file or directory
cc: error: lp_MPS.o: No such file or directory
cc: error: lp_params.o: No such file or directory
cc: error: lp_presolve.o: No such file or directory
cc: error: lp_price.o: No such file or directory
cc: error: lp_pricePSE.o: No such file or directory
cc: error: lp_scale.o: No such file or directory
cc: error: lp_simplex.o: No such file or directory
cc: error: lp_SOS.o: No such file or directory
cc: error: lp_utils.o: No such file or directory

抱歉,当我将代码包含在代码中时,它给了我这里的错误。

最佳答案

lpsolve如何在raspbian上使用python 3.5.3:

从存储库安装

apt-get install lp-solve # for shared object file (liblpsolve55.so)
apt-get install liblpsolve55-dev # for header files (e.g. lp_lib.h)

从sourceforge(https://sourceforge.net/projects/lpsolve/files/lpsolve/5.5.2.5/lp_solve_5.5.2.5_Python_source.tar.gz/download)获取Python源代码。

解压tar文件
tar -xzf lp_solve_5.5.2.5_Python_source.tar.gz
cd lp_solve_5.5/extra/Python

通过运行开始安装
bash build.sh

在我的情况下,源文件存在一些与python3不相关的问题。

找不到
  • lp_lib.h。通过在setup.py
  • 中的include_dirs中添加“/usr/include/lpsolve”来解决
  • hash.c中定义的函数的多个已定义错误。通过从要在setup.py中进行编译和链接的文件中删除“hash.c”文件来解决。
  • 未定义的引用symamd。通过在setup.py
  • 中的库中添加“colamd”来解决

    Python3相关问题:
  • print ...已更改为print(...)。在setup.py
  • 中更新
  • PyString已更改为PyUnicode/PyBytes,PyInt已更改为PyLong(https://docs.python.org/3/howto/cporting.html)。在pythonmod.c中更新
  • 初始化模块功能已更改(https://docs.python.org/2.3/whatsnew/node20.htmlDifference between PyMODINIT_FUNC and PyModule_Createhttps://docs.python.org/3/c-api/module.html)。在pythonmod.c中更新

  • setup.py差异
    14c14
    < print 'numpy: ' + NUMPY
    ---
    > print('numpy: ' + NUMPY)
    30c30
    <               ["lpsolve.c", "hash.c", "pythonmod.c"],
    ---
    >               ["lpsolve.c", "pythonmod.c"],
    32c32
    <                                 include_dirs=['../..', NUMPYPATH],
    ---
    >                                 include_dirs=['../..', NUMPYPATH, '/usr/include/lpsolve'],
    34c34
    <               libraries = ["lpsolve55"])
    ---
    >               libraries = ["lpsolve55", "colamd"])
    

    pythonmod.c差异
    35a36
    > static char lpsolve_name[] = "lpsolve";
    43a45,48
    > static PyModuleDef lpsolve_module = { .m_base = PyModuleDef_HEAD_INIT,
    > .m_name = lpsolve_name,
    > .m_doc = lpsolve_doc,
    > .m_methods = lpsolve_methods };
    47,48c52,53
    < DL_EXPORT(void)
    <     initlpsolve55(void)
    ---
    > PyMODINIT_FUNC
    > PyInit_lpsolve55(void)
    53c58
    <     m = Py_InitModule("lpsolve55", lpsolve_methods);
    ---
    >     m = PyModule_Create(&lpsolve_module);
    85,212c90,217
    <     PyDict_SetItemString(d, "LE", PyInt_FromLong(LE));
    ...
    <     PyDict_SetItemString(d, "FULL", PyInt_FromLong(FULL));
    ---
    >     PyDict_SetItemString(d, "LE", PyLong_FromLong(LE));
    ...
    >     PyDict_SetItemString(d, "FULL", PyLong_FromLong(FULL));
    213a219,220
    >
    >     return m;
    771c778
    <            (PyString_AsStringAndSize(item, &ptr, &size1) != 0) ||
    ---
    >            (PyBytes_AsStringAndSize(item, &ptr, &size1) != 0) ||
    799c806
    <         if (PyString_Check(vector)) {
    ---
    >         if (PyUnicode_Check(vector)) {
    824c831
    <           if ((item == NULL) || (!PyString_Check(item))) {
    ---
    >           if ((item == NULL) || (!PyUnicode_Check(item))) {
    832c839
    <               if ((PyString_AsStringAndSize(item, &ptr, &size1) != 0) ||
    ---
    >               if ((PyBytes_AsStringAndSize(item, &ptr, &size1) != 0) ||
    1028c1035
    <                 setlhs(lpsolvecaller, element, PyString_FromString(*str));
    ---
    >                 setlhs(lpsolvecaller, element, PyUnicode_FromString(*str));
    1035c1042
    <                   MyPyArray_SET_ITEM(PyObject1, i, PyString_FromString(*(str++)));
    ---
    >                   MyPyArray_SET_ITEM(PyObject1, i, PyUnicode_FromString(*(str++)));
    

    验证安装是否按照lpsolve(http://lpsolve.sourceforge.net/5.5/Python.htm#Installation)文档中的指示进行
    >>> from lpsolve55 import *
    >>> lpsolve()
    

    关于python - 如何为python 3.6安装lpsolve?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48765299/

    10-11 16:28