How to install plugin for air bubbler for offline pioreactor

Hi @CamDavidsonPilon

Could you please help me with offline intallation of the plugin for air bubbler?
The thing was I used a command line of
pio plugins install pioreactor_air_bubbler

And I recieved error long message as followed
2024-09-06T19:04:24+0100 DEBUG [install_plugin] Installing plugin pioreactor_air_bubbler.
2024-09-06T19:04:24+0100 DEBUG [install_plugin] bash /usr/local/bin/install_pioreactor_plugin.sh pioreactor_air_bubbler

2024-09-06T19:04:57+0100 ERROR [install_plugin] Failed to install plugin pioreactor_air_bubbler. See logs.
2024-09-06T19:04:57+0100 DEBUG [install_plugin] b’Looking in indexes: Simple index, https://www.piwheels.org/simple\n
2024-09-06T19:04:57+0100 DEBUG [install_plugin] b’+ export LC_ALL=C\n+ LC_ALL=C\n+ plugin_name=pioreactor_air_bubbler\n+ source=\n+ clean_plugin_name=pioreactor_air_bubbler\n+ clean_plugin_name_with_dashes=pioreactor-air-bubbler\n+ clean_plugin_name_with_underscores=pioreactor_air_bubbler\n++ python3 -c 'import site; print(site.getsitepackages()[0])'\n+ install_folder=/usr/local/lib/python3.11/dist-packages/pioreactor_air_bubbler\n++ crudini --get /home/pioreactor/.pioreactor/config.ini cluster.topology leader_hostname\n+ leader_hostname=Pio01\n++ hostname\n+ '[' Pio01 = Pio01 ']'\n+ am_i_leader=true\n+ '[' -n '' ']'\n+ download_and_check_if_leader_only pioreactor-air-bubbler\n+ local PACKAGE_NAME=pioreactor-air-bubbler\n+ local CLEAN_PACKAGE_NAME=pioreactor_air_bubbler\n+ pip download -qq --no-deps --dest /tmp pioreactor-air-bubbler\nWARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf63f5a10>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf63f5e70>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf63fc370>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf63fc790>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf63fcb70>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf63ff590>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf63ff930>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf63ffd70>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf64051b0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf64055f0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nERROR: Could not find a version that satisfies the requirement pioreactor-air-bubbler (from versions: none)\nERROR: No matching distribution found for pioreactor-air-bubbler\n+ local WHL_FILE\n++ ls '/tmp/pioreactor_air_bubbler*.whl'\nls: cannot access '/tmp/pioreactor_air_bubbler*.whl': No such file or directory\n+ WHL_FILE=\n+ local TEMPDIR\n++ mktemp -d\n+ TEMPDIR=/tmp/tmp.mgAxRcgPln\n+ unzip -d /tmp/tmp.mgAxRcgPln\nUnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.\n\nUsage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]\n Default action is to extract files in list, except those in xlist, to exdir;\n file[.zip] may be a wildcard. -Z => ZipInfo mode (“unzip -Z” for usage).\n\n -p extract files to pipe, no messages -l list files (short format)\n -f freshen existing files, create none -t test compressed archive data\n -u update files, create if necessary -z display archive comment only\n -v list verbosely/show version info -T timestamp archive to latest\n -x exclude files that follow (in xlist) -d extract files into exdir\nmodifiers:\n -n never overwrite existing files -q quiet mode (-qq => quieter)\n -o overwrite files WITHOUT prompting -a auto-convert any text files\n -j junk paths (do not make directories) -aa treat ALL files as text\n -U use escapes for all non-ASCII Unicode -UU ignore any Unicode fields\n -C match filenames case-insensitively -L make (some) names lowercase\n -X restore UID/GID info -V retain VMS version numbers\n -K keep setuid/setgid/tacky permissions -M pipe through “more” pager\nSee “unzip -hh” or unzip.txt for more help. Examples:\n unzip data1 -x joe => extract all files except joe from zipfile data1.zip\n unzip -p foo | more => send contents of foo.zip via pipe into program more\n unzip -fo foo ReadMe => quietly replace existing ReadMe if archive file newer\n+ '[' -f /tmp/tmp.mgAxRcgPln/LEADER_ONLY ']'\n+ rm -rf /tmp/tmp.mgAxRcgPln\n+ rm '/tmp/pioreactor_air_bubbler*.whl'\nrm: cannot remove '/tmp/pioreactor_air_bubbler*.whl': No such file or directory\n+ return 1\n+ sudo pip3 install --upgrade --force-reinstall --ignore-installed pioreactor-air-bubbler\nWARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf6994830>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf6994ad0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf6999030>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf6999530>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf6999910>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf699d310>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf699d6b0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf699daf0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf699df10>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nWARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0xf69a2330>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/pioreactor-air-bubbler/\nERROR: Could not find a version that satisfies the requirement pioreactor-air-bubbler (from versions: none)\nERROR: No matching distribution found for pioreactor-air-bubbler\n’
Traceback (most recent call last):
File “/usr/local/bin/pio”, line 8, in
sys.exit(pio())
^^^^^
File “/usr/local/lib/python3.11/dist-packages/click/core.py”, line 1157, in call
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.11/dist-packages/click/core.py”, line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.11/dist-packages/click/core.py”, line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.11/dist-packages/click/core.py”, line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.11/dist-packages/click/core.py”, line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.11/dist-packages/click/core.py”, line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.11/dist-packages/pioreactor/plugin_management/install_plugin.py”, line 44, in click_install_plugin
install_plugin(name_of_plugin, source)
File “/usr/local/lib/python3.11/dist-packages/pioreactor/plugin_management/install_plugin.py”, line 33, in install_plugin
raise BashScriptError(f"Failed to install plugin {name_of_plugin}. See logs.")
pioreactor.exc.BashScriptError: Failed to install plugin pioreactor_air_bubbler. See logs.

Thank you,
Sansanee

Additionally, we have managed to show the air bubbler buttons in the UI by manually installing the .yaml file in the jobs section of the plugin directory of the pioreactors, although pressing it results in a float(argument) must be a string or a real number, not ‘NoneType’.

We also tried installing the .whl file of the plugin from Github, through sudo pip3 install, and that was succesful, however, that didn’t seem to actually install the actual python script of the plugin :frowning:

I hope this information sheds some light into figuring this out!

Hi @Sansanee, I think you’re really close, you just need to add configuration to the config.ini: pioreactor-air-bubbler/pioreactor_air_bubbler/additional_config.ini at master · Pioreactor/pioreactor-air-bubbler · GitHub