Problem to load hou module in the standart OSX Python

   6065   7   1
User Avatar
Member
9 posts
Joined:
Offline
Hi all!

I try to import hou module:

sys.path.append('/Library/Frameworks/Houdini.framework/Versions/10.0.249.5/Resources/houdini/scripts/python')
import hou

and got the next message:

ImportError: dlopen(/Library/Frameworks/Houdini.framework/Versions/10.0.249.5/Resources/houdini/scripts/python/_hou.so, 2): no suitable image found. Did find:
/Library/Frameworks/Houdini.framework/Versions/10.0.249.5/Resources/houdini/scripts/python/_hou.so: mach-o, but wrong architecture

OSX Version is 10.5.8
Python 2.5.1 (r251:54863, Feb 9 2009, 18:49:36)

What is the workaround?

Thanks all for the answer!
User Avatar
Member
1905 posts
Joined: Nov. 2006
Offline
Unfortunately this isn't possible to do on OS X. There are problems with between 32 and 64 bit system things and garbage collection flags. This also prevents you from compiling your own Python libs, such as PyQt, and utilizing them inside Houdini.
Graham Thompson, Technical Artist @ Rockstar Games
User Avatar
Member
51 posts
Joined: Aug. 2011
Offline
Is this still not possible?

OSX 10.7.5
Houdini 12.5.427
http://www.martin-aufinger.com [www.martin-aufinger.com]
User Avatar
Member
1905 posts
Joined: Nov. 2006
Offline
I don't have a Mac capable of verifying now, but I'd wager this still isn't possible.
Graham Thompson, Technical Artist @ Rockstar Games
User Avatar
Member
51 posts
Joined: Aug. 2011
Offline
mhh. That would be a shame.

I am getting

/Library/Frameworks/Houdini.framework/Versions/12.5.427/Resources
Traceback (most recent call last):
File “enableHouModule.py”, line 31, in <module>
enableHouModule()
File “enableHouModule.py”, line 17, in enableHouModule
import DLFCN
ImportError: No module named DLFCN

if I use this script http://www.sidefx.com/docs/houdini12.5/hom/commandline#id489068 [sidefx.com] or the following if I just try to import hou


import hou
File “/Library/Frameworks/Houdini.framework/Versions/12.5.427/Resources/houdini/python2.6libs/hou.py”, line 18, in <module>
import _hou
ImportError: dlopen(/Library/Frameworks/Houdini.framework/Versions/12.5.427/Resources/houdini/python2.6libs/_hou.so, 2): Library not loaded: @rpath/libHoudiniAPPS2.dylib
Referenced from: /Library/Frameworks/Houdini.framework/Versions/12.5.427/Houdini
Reason: no suitable image found. Did find:
/Library/Frameworks/Houdini.framework/Versions/12.5.427/Libraries/libHoudiniAPPS2.dylib: GC capability mismatch
/Library/Frameworks/Houdini.framework/Versions/12.5.427/Resources/houdini/python2.6libs/../../../Libraries/libHoudiniAPPS2.dylib: GC capability mismatch
http://www.martin-aufinger.com [www.martin-aufinger.com]
User Avatar
Member
1 posts
Joined: Sept. 2006
Offline
Getting this error again with Houdini 14.0.258 running on OS X 10.8.5. This used to work with Houdini 11 and 12.

The section mucking with DYLD_LIBARY_PATH is me trying to get it working with Houdini 14:


————————————————–
/bin/tcsh -c
setenv VERSIONER_PYTHON_VERSION 2.6
setenv VERSIONER_PYTHON_PREFER_32_BIT no
cd /Library/Frameworks/Houdini.framework/Versions/14.0.258/Resources
source houdini_setup
/usr/bin/python -u /Applications/pfx/qube/api/python/qb/backend/child_bootstrapper.py –port 62619 –kind houdini
————————————————–
houdiniPy> print

houdiniPy> import sys
houdiniPy> import os
houdiniPy> import time
houdiniPy> import sys, os
houdiniPy>
def enableHouModule():
import sys,os

if sys.platform == ‘linux2’ and hasattr(sys, “setdlopenflags”):
old_dlopen_flags = sys.getdlopenflags()
import DLFCN
sys.setdlopenflags(old_dlopen_flags | DLFCN.RTLD_GLOBAL)

try:
import hou
except ImportError:
# Add $HFS/houdini/python2.xlibs to sys.path so Python can find the
# hou module.
sys.path.append(os.environ + “/houdini/python%d.%dlibs” % sys.version_info)

if sys.platform == ‘darwin’:
lib_path = ‘%s/Libraries’ % os.environ.replace('/Resources', ‘')
if ’DYLD_LIBRARY_PATH' in os.environ:
os.environ = ‘%s:%s’ % (os.environ.get('DYLD_LIBRARY_PATH', ''), lib_path)
else:
os.environ = lib_path
print ‘DEBUG: DYLD_LIBRARY_PATH = %s’ % os.environ
print ‘DEBUG: dylib = %s’ % (os.path.join(lib_path, ‘libHoudiniOPZ.dylib’))
print ‘DEBUG: dylib libHoudiniOPZ.dylib exists: %s’ % os.path.exists(os.path.join(lib_path, ‘libHoudiniOPZ.dylib’))

import hou
finally:
if sys.platform == ‘linux2’ and hasattr(sys, “setdlopenflags”):
sys.setdlopenflags(old_dlopen_flags)

houdiniPy> enableHouModule()
DEBUG: DYLD_LIBRARY_PATH = /Library/Frameworks/Houdini.framework/Versions/14.0.258/Libraries
DEBUG: dylib = /Library/Frameworks/Houdini.framework/Versions/14.0.258/Libraries/libHoudiniOPZ.dylib
DEBUG: dylib libHoudiniOPZ.dylib exists: True
——————————————————————————–
houdiniPy> import hou
ERROR: enableHouModule()
——————————————————————————–
Traceback (most recent call last):
File “/Applications/pfx/qube/api/python/qb/backend/pythonChildHandler.py”, line 598, in mainloop
result = self.execute(cmd)
File “/Applications/pfx/qube/api/python/qb/backend/pythonChildHandler.py”, line 552, in execute
exec cmd in self.globals, self.locals
File “<string>”, line 1, in <module>
File “<string>”, line 27, in enableHouModule
File “/Library/Frameworks/Houdini.framework/Versions/14.0.258/Resources/houdini/python2.6libs/hou.py”, line 18, in <module>
import _hou
ImportError: dlopen(/Library/Frameworks/Houdini.framework/Versions/14.0.258/Resources/houdini/python2.6libs/_hou.so, 2): Library not loaded: @rpath/libHoudiniOPZ.dylib
Referenced from: /Library/Frameworks/Houdini.framework/Versions/14.0.258/Resources/houdini/python2.6libs/_hou.so
Reason: image not found
——————————————————————————–
User Avatar
Member
2 posts
Joined: May 2006
Offline
I don't think it's possible using DYLD_LIBRARY_PATH as theres a few competing library versions between Houdini and the OS (at least for 10.10). I've been able to get it working by changing where _hou.so looks for it's libraries. But this might only be a good solution locally.

installNameChanges()
{
# installNameChanges <file> <replace> <with>
otool -L "$1" | while read line; do
echo "$line" | grep -q "$2"
if [ $? -eq 0 ]; then
lib=$(echo ${line} | awk -F''"$2"'| ' '{print $2}')
if [ -n "$4" ]; then
echo install_name_tool -change "$2$lib" "$3/$lib" "$1"
else
sudo install_name_tool -change "$2$lib" "$3/$lib" "$1"
fi
fi
done
}

installNameChanges "${HFS}/houdini/python2.6libs/_hou.so" @rpath/ @loader_path/../../../Libraries/
installNameChanges "${HFS}/houdini/python2.7libs/_hou.so" @rpath/ @loader_path/../../../Libraries/
User Avatar
Member
183 posts
Joined: Dec. 2011
Offline
marsupial
I don't think it's possible using DYLD_LIBRARY_PATH as theres a few competing library versions between Houdini and the OS (at least for 10.10). I've been able to get it working by changing where _hou.so looks for it's libraries. But this might only be a good solution locally.

installNameChanges()
{
# installNameChanges <file> <replace> <with>
otool -L "$1" | while read line; do
echo "$line" | grep -q "$2"
if [ $? -eq 0 ]; then
lib=$(echo ${line} | awk -F''"$2"'| ' '{print $2}')
if [ -n "$4" ]; then
echo install_name_tool -change "$2$lib" "$3/$lib" "$1"
else
sudo install_name_tool -change "$2$lib" "$3/$lib" "$1"
fi
fi
done
}

installNameChanges "${HFS}/houdini/python2.6libs/_hou.so" @rpath/ @loader_path/../../../Libraries/
installNameChanges "${HFS}/houdini/python2.7libs/_hou.so" @rpath/ @loader_path/../../../Libraries/

I have been running into this issue while trying to integrate houdini into our mac based pipeline. This shell script solution almost works. I ran a test where it only would echo back the intended changes and it looked perfect, however when I reenabled the sudo, I got back this error:

changing install names or rpaths can't be redone for: /Library/Frameworks/Houdini.framework/Versions/15.0.416/Resources/houdini/python2.7libs/_hou.so (for architecture x86_64) because larger updated load commands do not fit (the program must be relinked, and you may need to use -headerpad or -headerpad_max_install_names)

As far as I can make out, -headerpad_max_install_names is a linker flag that has to be enabled on compile in order to allow install_name_tool to replace paths with longer ones. If this is the case it seems like something that Sidefx would have to fix since we can't recompile the binaries. Hopefully someone can tell me I am wrong though?

Anyways, I would love to hear if anyone has figured a way to get the hou module to import from the terminal. Has Sidefx announced any plans to fix this?
  • Quick Links