Re: Debugging AttributeError: 'module' object has no attribute 'kmod'
From: Lucas De Marchi <hidden>
Date: 2014-11-15 13:34:56
Hi, sorry for the delay On Thu, Oct 30, 2014 at 4:36 PM, Andy Grover [off-list ref] wrote:
On 10/30/2014 09:37 AM, Christophe Vu-Brugier wrote:quoted
Hi Andy, On Thu, 30 Oct 2014 09:24:37 -0700, Andy Grover wrote :quoted
On 10/30/2014 08:09 AM, Christophe Vu-Brugier wrote:quoted
Hi Andy, I am working on better integrating targetcli in Buildroot. Buildroot is an easy to configure build system that uses cross compilation to generate tiny root file systems for embedded platforms. Buildroot supports systemd so I built a root file system with targetcli and systemd. When systemd is selected as the init system in Buildroot, the python-kmod module is also built by Buildroot (because kmod is a dependency of systemd). And since python-kmod is present, targetcli tries to use it. But it fails with the following error: # targetcli Traceback (most recent call last): File "/usr/bin/targetcli", line 100, in <module> main() File "/usr/bin/targetcli", line 63, in main root_node = UIRoot(shell, as_root=is_root) File "home/cvubrugier/repos/buildroot/output/x86-targetcli-systemd/target/usr/lib/python3.4/site-packages/targetcli/ui_root.py", line 44, in __init__ File "home/cvubrugier/repos/buildroot/output/x86-targetcli-systemd/target/usr/lib/python3.4/site-packages/rtslib/root.py", line 66, in __init__ File "home/cvubrugier/repos/buildroot/output/x86-targetcli-systemd/target/usr/lib/python3.4/site-packages/rtslib/utils.py", line 364, in modprobe AttributeError: 'module' object has no attribute 'Kmod' Trying to use python-kmod by hand also fails on the system. Python 3.4.1 (default, Oct 29 2014, 13:37:35) [GCC 4.9.1] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import kmod >>> km = kmod.kmod()
it should be kmod.Kmod() Note the capital K.
(CCing kmod dev list too) Starting in kmod v17 the Python library was merged into the main kmod repo, and the version indicates that you are using the Python wrapper built from that (as opposed to the now-defunct separate project called python-kmod, whose versions never exceeded 0.9.) Lucas De Marchi did the build integration because my autotools knowledge was not sufficient -- I suspect building kmod with --enable-python only enables Python 2. I'd need to know more about what distro you're on and look at the packaging scripts, but I think upstream support for building the library for Python 3 is needed (this might be extremely simple but it still probably requires a separate --enable-python3 configure option). Did the packager think they could just take the Py2 binaries and they'd work for Python 3??? So I'd open an issue with the kmod packager for whatever distro because something is broken, and maybe the CC'd upstream developers might also be able to help us have explicit support for building for Python 3?
It should work fine with python3 as well. Just tested here: $ make install DESTDIR=/tmp/inst $ PYTHONPATH=/tmp/inst/usr/lib/python3.4/site-packages python3 Python 3.4.2 (default, Oct 8 2014, 13:44:52) [GCC 4.9.1 20140903 (prerelease)] on linux Type "help", "copyright", "credits" or "license" for more information.
quoted
quoted
import kmod km = kmod.Kmod() km.loaded()
<generator object at 0x7fbf9f807cc8> -- Lucas De Marchi