unable to install graph-tool in windows 7 - python

I'd like to use graph-tool on windows 7, but I'm having trouble installing it.
All the requirements listed here are successfully installed. Python 2.7 is installed in C:\python27. Boost 1.49.0 was successfully compiled with mingw, installed in C:\boost and the BOOST_ROOT environment variable is pointing to it. Boost is compiled in debug and release mode and both static and dynamic.
Invoking configure from within MSyS leads to the following error.
configure: error:
Could not link test program to Python. Maybe the main Python library has been
installed in some non-standard library path. If so, pass it to configure,
via the LDFLAGS environment variable.
Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
============================================================================
ERROR!
You probably have to install the development version of the Python package
for your distribution. The exact name of this package varies among them.
============================================================================
Calling configure LDFLAGS="-LC:/python27/libs" fixed this error, but lead to the following error
checking for boostlib >= 1.38.0... configure: error: We could not detect the boo
st libraries (version 1.38 or higher). If you have a staged boost library (still
not installed) please specify $BOOST_ROOT in your environment and do not give a
PATH to --with-boost option. If you are sure you have boost installed, then ch
eck your version number looking in <boost/version.hpp>. See http://randspringer.
de/boost for more documentation.
This is weird, since BOOST_ROOT is clearly defined (checked it with printenv command).
The next command I tried was configure --with-boost="C:/boost" LDFLAGS="-LC:/python27/libs"
checking for boostlib >= 1.38.0... yes
checking whether the Boost::Python library is available... no
configure: error: No usable boost::python found
Alright it detects boost, but It can't find boost::python. Due to its size I'm unable to post the config.log on stackoverflow but you can find it here.
I'm really confused right now and would appreciate any help.

I have zero experience with compiling graph-tool (or anything else) for windows, but the following part of your config.log stands out:
configure:17224: checking whether the Boost::Python library is available
configure:17254: g++ -c -Wall -ftemplate-depth-150 -Wno-deprecated -Wno-unknown-pragmas -O99 -fvisibility=default -fvisibility-inlines-hidden -Wno-unknown-pragmas -Ic:\python27\include conftest.cpp >&5
conftest.cpp:32:36: fatal error: boost/python/module.hpp: No such file or directory
compilation terminated.
Note how the boost path you passed is not being used! Try to pass CXXFLAGS="-IC:\boost\include" to configure as well.

May be something like this would help:
./configure --prefix=/usr/
for windows path is different, try it yourself.

Related

FileNotFoundError with Python CDLL

I have been struggling with this problem for several days. Basically, what I would like to do is to call a shared dll library using python. I created the dll using mingw32-make and the makefile is as follows:
CC=gcc
CFLAGS=-shared -fopenmp -L./
LIBS=-lpthread libopenblas.a
OPTIM=-O3
CURRENT_PATH=$(shell cd)
INITMODEL=$(CURRENT_PATH)/c_call/init_model.c
SRC=$(INITMODEL)
DEST=offline.dll
$(DEST): $(SRC)
$(CC) $(CFLAGS) $(OPTIM) -o $(DEST) $(SRC) $(LIBS)
The compilation worked through but when I called the dll using python, I got an error:
FileNotFoundError: Could not find module 'C:\Users\zhenh\Desktop\RTLoc\client\src\offline.dll' (or one of its dependencies). Try using the full path with constructor syntax.
Then, I found python CDLL managed to load the dll when I remove linking "libopenblas.a" from the compilation. So I guess the problem may be due to that I did not compile openblas right. So I went to msys2 MinGW 32bit and compiled the openblas with mingw32-make, which it is for native windows. But when I put the newly compiled libopenblas.a in the makefile, CDLL gave the error again.
I also tried to link libopenblas.dll and failed. And openblas is the library I need to use so there are no ways to get rid of it.
The Python version is 3.8.7 and I have used os.add_dll_directory to include the folder having the dll I generated. Thanks everyone for giving me some idea how to fix this?
It worked when I switched to Anaconda Powershell Prompt.

Cross-compiling for Windows Python error

I try to cross-compile libplist (https://github.com/libimobiledevice/libplist) for 64-bit Windows and create a DLL from it. I downloaded mingw-w64 for Linux subsystem on Windows 10 (Ubuntu 14.04 bash) and set the environment variables (CC, CXX, CPP, RANLIB). I use ./autogen.sh --host=x86_64-w64-mingw32 to configure package. However it exits with the error:
configure:16825: error:
Could not link test program to Python. Maybe the main Python library has been
installed in some non-standard library path. If so, pass it to configure,
via the LDFLAGS environment variable.
Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
============================================================================
ERROR!
You probably have to install the development version of the Python package
for your distribution. The exact name of this package varies among them.
============================================================================
In config.log it says:
configure:16813: x86_64-w64-mingw32-gcc -o conftest.exe -g -O2 -I/usr/include/python2.7 -I/usr/include/x86_64-linux-g$
In file included from /usr/include/python2.7/Python.h:8:0,
from conftest.c:33:
/usr/include/python2.7/pyconfig.h:78:3: error: #error unknown multiarch location for pyconfig.h
# error unknown multiarch location for pyconfig.h
^
In file included from /usr/include/python2.7/pyport.h:4:0,
from /usr/include/python2.7/Python.h:58,
from conftest.c:33:
/usr/include/python2.7/pyconfig.h:78:3: error: #error unknown multiarch location for pyconfig.h
# error unknown multiarch location for pyconfig.h
^
In file included from /usr/include/python2.7/pymath.h:4:0,
from /usr/include/python2.7/Python.h:77,
from conftest.c:33:
/usr/include/python2.7/pyconfig.h:78:3: error: #error unknown multiarch location for pyconfig.h
# error unknown multiarch location for pyconfig.h
^
configure:16813: $? = 1
It doesn't return this error when I try to compile it for Linux, so I thought that it's because it needs python libraries compiled for Windows x86_64. I copied the appropriate files from Windows from C:/Python27/include and tried to set environment variable for configuration LDFLAGS="-L/path/to/python/include" and PKG_CONFIG_PATH=/path/to/python/include separately. Neither of them worked. I also noticed, that in C:/Python27/include there was also a file called pyconfig.h.Why does the script uses the one installed on Linux? Is there a way I could force it to use the other one?
My main objective would be to make a 64-bit Windows DLL from libusbmuxd (https://github.com/libimobiledevice/libusbmuxd), but it needs libplist to be compiled too. How could I solve this issue? Thanks for the answers in advance.
You can try libimobiledevice-win32. Although the name is a bit confusing, it builds 32-bit and 64-bit Windows versions of libimobiledevice.
You can compile libplist, libusbmuxd, libimobildevice and the various utilities for Windows using Visual Studio, avoiding the need to cross compile.
The company I work for, Quamotion, maintains libimobiledevice-win32 and we try to stay on track with the latest upstream changes.
You can download precompiled versions from the CI build, see e.g. https://ci.appveyor.com/project/qmfrederik/imobiledevice-net/build/artifacts for zip files which contain the latest bits.

Error when attempting to build Python from source in Cygwin

From all that I've read, I get the impression that building from source (relatively speaking) is pretty easy within Cygwin. However, when I installed the base package along with gcc and attempted to build Python 2.7.8 from source, I got the following error from running ./configure:
checking whether we are cross compiling... configure: error: in `/cygdrive/h/Python-2.7.8':
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details
Upon opening config.log, I see this:
configure:3978: checking whether we are cross compiling
configure:3986: gcc -o conftest.exe conftest.c >&5
configure:3990: $? = 0
configure:3997: ./conftest.exe
./configure: line 3999: ./conftest.exe: Permission denied
configure:4001: $? = 126
configure:4008: error: in `/cygdrive/h/Python-2.7.8':
configure:4010: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
I'm not sure I understand exactly what the issue is. It appears to attempt to compile conftest.c into conftest.exe (which appears to work?) and subsequently attempts to run the executable but gets denied on the basis of permission.
Any thoughts or insights on where to go from here?
Turns out I had inadvertantly installed the wrong GCC package. Rolling back all of the the development package installs and just installing GNU GCC 4.8.3 resolved the above.

Error: Command failed with rc=65536 python and mod_wsgi

i'm having this problem:
i'm runing pythonbrew to get python2.7, and so i re-compiled mod_wsgi to use the 2.7 python.
to that end, i followed this tutorial:
code.google.com/p/modwsgi/wiki/QuickInstallationGuide
which involved downloading the file - there is a tar.gz file i get - and then "configuring it" with ./configure --with-python=/home/bharal/.pythonbrew/pythons/Python-2.7.2/bin/python --enable-shared
now i'm assuming this is the right place to attach for my python - the value for with-python above is just the response i get to a which python
OK! So, now the problem. After i run the configure above, i run make and i get:
/usr/include/features.h:160:1: warning: this is the location of the previous definition
/usr/share/apr-1.0/build/libtool --silent --mode=link --tag=disable-static x86_64-linux-gnu-gcc -o mod_wsgi.la -rpath /usr/lib/apache2/modules -module -avoid-version mod_wsgi.lo -L/home/aiyer /.pythonbrew/pythons/Python-2.7.2/lib -L/home/aiyer/.pythonbrew/pythons/Python-2.7.2/lib /python2.7/config -lpython2.7 -lpthread -ldl -lutil -lm
/usr/bin/ld: /home/bharal/.pythonbrew/pythons/Python-2.7.2/lib/libpython2.7.a(abstract.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
/home/aiyer/.pythonbrew/pythons/Python-2.7.2/lib/libpython2.7.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
apxs:Error: Command failed with rc=65536
And i have no idea what to do. I came across this answer is SO:
https://stackoverflow.com/a/6118155/1061426
but this doesn't help me any much - it isn't as far as i can tell a series of steps, but more an interesting tidbit to think about.
I ran this command to check if i have python 64 bit:
import sys
print maxint
if 64 bit ==> 9223372036854775807
if 32 bit ==> 2147483647
ok, so i'm totes running 64bit because i get the bigger number. So i read this doco here:
http://code.google.com/p/modwsgi/wiki/InstallationIssues#Mixing_32_Bit_And_64_Bit_Packages
because i'm running the 64 bit python, does that mean that my problem isn't this:
This error is believed to be result of the version of Python being used having been originally compiled for the generic X86 32 bit architecture whereas mod_wsgi is being compiled for X86 64 bit architecture. The actual error arises in this case because 'libtool' would appear to be unable to generate a dynamically loadable module for the X86 64 bit architecture from a X86 32 bit static library.
but rather this?
Alternatively, the problem is due to 'libtool' on this platform not being able to create a loadable module from a X86 64 bit static library in all cases.
(the above quotes from the above link)
and if that is the case, what the heck do i do? I haven't the foggiest notion what to do in either scenario - and yes, i read the rest of that page, but it might as well have been written in greek ( i don't speak greek ).
any suggestions?
UPDATE:
i never fixed this and ended up using the python my ubuntu came with - no difference from the running of my code's point of view.
The documentation says:
If the first issue, the only solution to this problem is to recompile
Python for the X86 64 bit architecture. When doing this, it is
preferable, and may actually be necessary, to ensure that the
'--enable-shared' option is provided to the 'configure' script for
Python when it is being compiled and installed.
So, you need to reinstall Python from source code, ensuring the '--enable-shared' option is supplied to the 'configure' command for Python prior to running 'make'.
If 'pythonbrew' doesn't allow you to do that, then tell the pythonbrew people that the way they are building their Python version with shared library support is arguably broken and will prevent many embedded systems from failing to run.
Having come across this problem myself with Fedora 19 64bit, I found that the mod_wsgi would compile and install from source if I installed both the Python-devel and httpd-devel packages.
I am not using pythonbrew however.
My Dear Python developers, I was also getting the same error, and here is how I got it fixed. The very first step is that you'll have install python with --enable-shared option. Next thing, Make sure you have dev dependencies installed for both Apache and Python. sudo apt-get install apache2-dev and sudo apt-get install python3.8-dev. I was using Python 3.8 so i install python3.8-dev. You need to install the one matching with your python version.
In addition to this, read this aricle and follow the instruction closely, given here https://modwsgi.readthedocs.io/en/develop/user-guides/quick-installation-guide.html#apache-requirements
I just followed it and was able to make it work properly.

Compiling Python Extension On Windows With Cygwin

I have been having a terrible time trying to compile a python extension - hopefully someone can help.
I initially tried executing 'python.exe setup.py build' but received the error: 'Python was built Visual Studio 2003; extensions must be built with a compiler that can generate compatible binaries...".
So I then downloaded Cygwin, and have tried sending the switch '-c mingw32'. A few lines were written into the console - then I get the error message: command 'gcc' failed: Permission denied.
I was initially using the Visual Studio 2010 Command Line to do this, but tried with bash and got the same result.
I have spent a considerable amount of time researching the issue, and it appears Cygwin uses symlinks for gcc and g++, and windows doesn't understand how to handle this.
How exactly can I force setup.py to use gcc-3.exe instead of the gcc.exe symlink?
I know it's inelegant, but you can rename the symlink and copy gcc-3.exe to gcc.exe. That worked for me when I used Cygwin's gcc. You might want to switch to the mingw64-i686 (or mingw64-x86_64) package to get gcc 4.5.3, or just install MinGW-w64 separately for compiling under Windows.
Also, you can permanently configure distuilts in PythonXX\Lib\distutils\distutils.cfg:
[build]
compiler = mingw32
[build_ext]
compiler = mingw32
[build_clib]
compiler = mingw32

Categories