nRF24/RF24

can't find RF24 method inside RF24 module

FalconCode10 opened this issue · 18 comments

after installing RF24 module on raspberry pi, i successfully import module
also could import all methods using the following command:

from RF24 import *

till now there is no problem.
when i tried to use a receiver code, first command was

from RF24 import RF24

by running code, there is an error: unable to locate RF24
any help please

I need a little more information to help you.

  1. How exactly did you install the python module?
  2. Are you using sudo?

I used virtual environment because raspberry refused to install RF24 and many other modules like numpy

You still haven't answered my questions.

Are you following our documented instructions about installing the python wrapper?

your document talk about Linux not raspbian

also i tried more than method to install your module, but every time after i finished this message appeared to me: "unable to locate xyz"

xyz is the module or in the best case it's the RF24 method inside RF24 module

I can't help you if you don't tell me the exact commands that you are typing.

Raspbian (which has been renamed to "RPi OS") is a flavor of Linux. The install instructions are the same for any flavor of Linux (even Ubuntu).

It would be better if you posted the exact error message instead of telling me what you think the error message means. I doubt that it has trouble locating the RF24 class (not a method) if it can locate the RF24 module. Usually, this is because

  • you used sudo to install the module but not to execute the example
  • you used sudo to execute the example but not to install the module

Do not use sudo!

This is talked about in the note at the end of the install instructions, especially regarding the use of a virtual environment (or also known as "venv"). We recommend that users install the C++ RF24 library using the SPIDEV driver because (among other good reasons) it doesn't require sudo to execute. The driver named RPi will be removed in the future because it is not compatible with RPi5 or newer.


I'm also sensing that English is not your primary language. You can write here in your preferred language, and I'll just use Google translate on my end. Hopefully that helps.

this is the last step i reached

>>> import RF24
>>> from RF24 import RF24
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'RF24' from 'RF24' (unknown location)

you can see that i can import RF24 without any problems, but once i tried to import RF24 method from RF24 module, it can't be done
dear, you are right, English is not my native language, but if i used google translate it will be more difficult that's because google translate, translate literal translation

By following both the

  1. instructions to build and install the C++ RF24 library.
  2. instructions to build and install the python wrapper

I'm still not able to reproduce this error message.

I REALLY NEED TO KNOW THE COMMANDS YOU USE TO INSTALL THE RF24 MODULE!

sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential cmake python3-dev python3-pip python3-venv git

cd ~
python3 -m venv rf24_env
source rf24_env/bin/activate

git clone https://github.com/nRF24/RF24.git

cd ~/RF24
mkdir build
cd build
cmake ..
make
sudo make install

cd ~/RF24/pyRF24
python3 setup.py build
python3 setup.py install

before installing updates

It is important to delete old build artifacts and uninstall any previous pyRF24 module.

cd ~/RF24
sudo rm -r build/
rm Makefile.inc
cd pyRF24
rm -r build/ __pycache__/ RF24.egg-info/
cd ../
sudo rm /usr/local/lib/librf24.*
python3 -m pip uninstall RF24

Then repeat all the commands you posted.

Tip

Please explicitly use the SPIDEV driver. This command:

cmake ..

should be replaced with

cmake .. -DRF24_DRIVER=SPIDEV

Important

The following commands are no longer encouraged. These commands:

python3 setup.py build
python3 setup.py install

should be replaced with

python3 -m pip install .

So, the build commands (as simplified from linked instructions) is:

cd ~/RF24

sudo rm -r build/
rm Makefile.inc
cd pyRF24
rm -r build/ __pycache__/ RF24.egg-info/
cd ../
sudo rm /usr/local/lib/librf24.*
python3 -m pip uninstall RF24

mkdir build && cd build
cmake .. -DRF24_DRIVER=SPIDEV
make
sudo make install

cd ../pyRF24
python3 -m pip install .

If you are seeing a build error, then you should also report that here.

The following is an error:

      pyRF24.cpp:1:10: fatal error: boost/python.hpp: No such file or directory
          1 | #include <boost/python.hpp>
            |          ^~~~~~~~~~~~~~~~~~
      compilation terminated.

This means you need to install boost.python library first:

sudo apt install libboost-python-dev
sudo ln -s $(ls /usr/lib/$(ls /usr/lib/gcc | tail -1)/libboost_python3*.so | tail -1) /usr/lib/$(ls /usr/lib/gcc | tail -1)/libboost_python3.so

Then try

python3 -m pip install --force-reinstall .

last update dear

sudo apt install libboost-python-dev
sudo ln -s $(ls /usr/lib/$(ls /usr/lib/gcc | tail -1)/libboost_python3*.so | tail -1) /usr/lib/$(ls /usr/lib/gcc | tail -1)/libboost_python3.so
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
libboost-python-dev is already the newest version (1.74.0.3).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
ln: failed to create symbolic link '/usr/lib/aarch64-linux-gnu/libboost_python3.so': 
File exists

Ok, the "File exists" output is good. It means that pyRF24/setup.py can build as expected.

Has any of this helped?
Are you still getting the ImportError?

I am also curious, what is your output for the following command?

pip list
moshtohor@raspberrypi:~ $ pip list
Package                            Version
---------------------------------- ----------
arandr                             0.1.11
asgiref                            3.6.0
astroid                            2.14.2
asttokens                          2.2.1
av                                 10.0.0
Babel                              2.10.3
beautifulsoup4                     4.11.2
blinker                            1.5
certifi                            2022.9.24
chardet                            5.1.0
charset-normalizer                 3.0.1
click                              8.1.3
colorama                           0.4.6
colorzero                          2.0
cryptography                       38.0.4
cupshelpers                        1.0
dbus-python                        1.3.2
dill                               0.3.6
distlib                            0.3.6
distro                             1.8.0
docutils                           0.19
filelock                           3.9.0
Flask                              2.2.2
gpiozero                           2.0
html5lib                           1.1
idna                               3.3
importlib-metadata                 4.12.0
isort                              5.6.4
itsdangerous                       2.1.2
jedi                               0.18.2
Jinja2                             3.1.2
lazy-object-proxy                  1.9.0
lgpio                              0.2.2.0
libevdev                           0.5
logilab-common                     1.9.8
lxml                               4.9.2
MarkupSafe                         2.1.2
mccabe                             0.7.0
meson                              1.0.1
more-itertools                     8.10.0
mypy                               1.0.1
mypy-extensions                    0.4.3
numpy                              1.24.2
oauthlib                           3.2.2
olefile                            0.46
parso                              0.8.3
pexpect                            4.8.0
pgzero                             1.2
picamera2                          0.3.18
pidng                              4.0.9
piexif                             1.1.3
pigpio                             1.78
Pillow                             9.4.0
pip                                23.0.1
platformdirs                       2.6.0
psutil                             5.9.4
ptyprocess                         0.7.0
pycairo                            1.20.1
pycryptodomex                      3.11.0
pycups                             2.0.1
pygame                             2.1.2
Pygments                           2.14.0
PyGObject                          3.42.2
pyinotify                          0.9.6
PyJWT                              2.6.0
pylint                             2.16.2
PyOpenGL                           3.1.6
pyOpenSSL                          23.0.0
PyQt5                              5.15.9
PyQt5-sip                          12.11.1
pyserial                           3.5
pysmbc                             1.0.23
python-apt                         2.6.0
python-dotenv                      0.21.0
python-prctl                       1.8.1
pytz                               2022.7.1
pyudev                             0.24.0
reportlab                          3.6.12
requests                           2.28.1
requests-oauthlib                  1.3.0
responses                          0.18.0
roman                              3.3
RPi.GPIO                           0.7.1a4
RTIMULib                           7.2.1
Send2Trash                         1.8.1b0
sense-hat                          2.6.0
setuptools                         66.1.1
simplejpeg                         1.6.6
simplejson                         3.18.3
six                                1.16.0
smbus2                             0.4.2
soupsieve                          2.3.2
spidev                             3.5
ssh-import-id                      5.10
thonny                             4.1.4
toml                               0.10.2
tomlkit                            0.11.7
twython                            3.8.2
types-aiofiles                     22.1
types-annoy                        1.17
types-appdirs                      1.4
types-aws-xray-sdk                 2.10
types-babel                        2.11
types-backports.ssl-match-hostname 3.7
types-beautifulsoup4               4.11
types-bleach                       5.0
types-boto                         2.49
types-braintree                    4.17
types-cachetools                   5.2
types-caldav                       0.10
types-certifi                      2021.10.8
types-cffi                         1.15
types-chardet                      5.0
types-chevron                      0.14
types-click-spinner                0.1
types-colorama                     0.4
types-commonmark                   0.9
types-console-menu                 0.7
types-contextvars                  2.4
types-croniter                     1.3
types-cryptography                 3.3
types-D3DShot                      0.1
types-dateparser                   1.1
types-DateTimeRange                1.2
types-decorator                    5.1
types-Deprecated                   1.2
types-dj-database-url              1.0
types-docopt                       0.6
types-docutils                     0.19
types-editdistance                 0.6
types-emoji                        2.1
types-entrypoints                  0.4
types-first                        2.0
types-flake8-2020                  1.7
types-flake8-bugbear               22.10.27
types-flake8-builtins              2.0
types-flake8-docstrings            1.6
types-flake8-plugin-utils          1.3
types-flake8-rst-docstrings        0.2
types-flake8-simplify              0.19
types-flake8-typing-imports        1.14
types-Flask-Cors                   3.0
types-Flask-SQLAlchemy             2.5
types-fpdf2                        2.5
types-gdb                          12.1
types-google-cloud-ndb             1.11
types-hdbcli                       2.14
types-html5lib                     1.1
types-httplib2                     0.21
types-humanfriendly                10.0
types-invoke                       1.7
types-JACK-Client                  0.5
types-jmespath                     1.0
types-jsonschema                   4.17
types-keyboard                     0.13
types-ldap3                        2.9
types-Markdown                     3.4
types-mock                         4.0
types-mypy-extensions              0.4
types-mysqlclient                  2.1
types-oauthlib                     3.2
types-openpyxl                     3.0
types-opentracing                  2.4
types-paho-mqtt                    1.6
types-paramiko                     2.11
types-parsimonious                 0.10
types-passlib                      1.7
types-passpy                       1.0
types-peewee                       3.15
types-pep8-naming                  0.13
types-Pillow                       9.3
types-playsound                    1.3
types-polib                        1.1
types-prettytable                  3.4
types-protobuf                     3.20
types-psutil                       5.9
types-psycopg2                     2.9
types-pyaudio                      0.2
types-PyAutoGUI                    0.9
types-pycurl                       7.45
types-pyfarmhash                   0.3
types-pyflakes                     2.5
types-Pygments                     2.13
types-pyinstaller                  5.6
types-PyMySQL                      1.0
types-pynput                       1.7
types-pyOpenSSL                    22.1
types-pyRFC3339                    1.1
types-PyScreeze                    0.1
types-pysftp                       0.2
types-pytest-lazy-fixture          0.6
types-python-crontab               2.6
types-python-dateutil              2.8
types-python-gflags                3.1
types-python-jose                  3.3
types-python-nmap                  0.7
types-python-slugify               6.1
types-pytz                         2022.6
types-pyvmomi                      7.0
types-pywin32                      304
types-PyYAML                       6.0
types-redis                        4.3
types-regex                        2022.10.31
types-requests                     2.28
types-retry                        0.9
types-Send2Trash                   1.8
types-setuptools                   65.5
types-simplejson                   3.17
types-singledispatch               3.7
types-six                          1.16
types-slumber                      0.7
types-SQLAlchemy                   1.4.43
types-stdlib-list                  0.8
types-stripe                       3.5
types-tabulate                     0.9
types-termcolor                    1.1
types-toml                         0.10
types-toposort                     1.7
types-tqdm                         4.64
types-tree-sitter                  0.20
types-tree-sitter-languages        1.5
types-ttkthemes                    3.2
types-typed-ast                    1.5
types-tzlocal                      4.2
types-ujson                        5.5
types-urllib3                      1.26
types-vobject                      0.9
types-waitress                     2.1
types-whatthepatch                 1.0
types-xmltodict                    0.13
types-xxhash                       3.0
types-zxcvbn                       4.4
typing_extensions                  4.4.0
urllib3                            1.26.12
v4l2-python3                       0.3.3
virtualenv                         20.17.1+ds
webencodings                       0.5.1
Werkzeug                           2.2.2
wheel                              0.38.4
wrapt                              1.14.1
zipp                               1.0.0
moshtohor@raspberrypi:~ $ python3
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import RF24
>>> from RF24 import RF24
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'RF24' from 'RF24' (unknown location)
>>>

I don't see RF24 in the pip list output. This means that it is not installed. There must be some build error that you are not aware of (or not telling me about).

This spoken language barrier between us makes helping you too difficult for me.

I only have 1 last recommendation: Switch to using our newer pyrf24 package. You only need to change the import statements.

python3 -m pip install pyrf24
>>> from pyrf24 import RF24
>>> radio = RF24(22, 0)
>>> radio.begin()
True

I'm sensing that you don't know how to use a python virtual environment. It is not my job to teach people how to use python. You'll need to learn this from somewhere else.

thanks bro, you are very helpful

Now that I have nothing left to recommend or suggest, I'm going to close this. You can still post comments here if you want.