Worked example. As previous example with different name for the venv holder, and showing change of Working Directory.
Code:
david@rp54bw64full0512:~/Support/capell $ python -m venv foobardavid@rp54bw64full0512:~/Support/capell $ source foobar/bin/activate(foobar) david@rp54bw64full0512:~/Support/capell $ python -m pip install paho-mqttLooking in indexes: https://pypi.org/simple, https://www.piwheels.org/simpleCollecting paho-mqtt Using cached https://www.piwheels.org/simple/paho-mqtt/paho_mqtt-2.1.0-py3-none-any.whl (67 kB)Installing collected packages: paho-mqttSuccessfully installed paho-mqtt-2.1.0(foobar) david@rp54bw64full0512:~/Support/capell $ pythonPython 3.11.2 (main, Apr 28 2025, 14:11:48) [GCC 12.2.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import paho.mqtt.client as mqtt>>> dir(mqtt)['AUTH', 'Any', 'CONNACK', 'CONNACK_ACCEPTED', 'CONNACK_REFUSED_BAD_USERNAME_PASSWORD', 'CONNACK_REFUSED_IDENTIFIER_REJECTED', 'CONNACK_REFUSED_NOT_AUTHORIZED', 'CONNACK_REFUSED_PROTOCOL_VERSION', 'CONNACK_REFUSED_SERVER_UNAVAILABLE', 'CONNECT', 'Callable', 'CallbackAPIVersion', 'CallbackOnConnect', 'CallbackOnConnectFail', 'CallbackOnConnect_v1', 'CallbackOnConnect_v1_mqtt3', 'CallbackOnConnect_v1_mqtt5', 'CallbackOnConnect_v2', 'CallbackOnDisconnect', 'CallbackOnDisconnect_v1', 'CallbackOnDisconnect_v1_mqtt3', 'CallbackOnDisconnect_v1_mqtt5', 'CallbackOnDisconnect_v2', 'CallbackOnLog', 'CallbackOnMessage', 'CallbackOnPreConnect', 'CallbackOnPublish', 'CallbackOnPublish_v1', 'CallbackOnPublish_v2', 'CallbackOnSocket', 'CallbackOnSubscribe', 'CallbackOnSubscribe_v1', 'CallbackOnSubscribe_v1_mqtt3', 'CallbackOnSubscribe_v1_mqtt5', 'CallbackOnSubscribe_v2', 'CallbackOnUnsubscribe', 'CallbackOnUnsubscribe_v1', 'CallbackOnUnsubscribe_v1_mqtt3', 'CallbackOnUnsubscribe_v1_mqtt5', 'CallbackOnUnsubscribe_v2', 'CleanStartOption', 'Client', 'ConnackCode', 'ConnectFlags', 'DISCONNECT', 'Dict', 'DisconnectFlags', 'EAGAIN', 'HAVE_DNS', 'HTTPHeader', 'Iterator', 'LOGGING_LEVEL', 'List', 'Literal', 'LogLevel', 'MQTTErrorCode', 'MQTTMatcher', 'MQTTMessage', 'MQTTMessageInfo', 'MQTTProtocolVersion', 'MQTT_BRIDGE', 'MQTT_CLEAN_START_FIRST_ONLY', 'MQTT_CLIENT', 'MQTT_ERR_ACL_DENIED', 'MQTT_ERR_AGAIN', 'MQTT_ERR_AUTH', 'MQTT_ERR_CONN_LOST', 'MQTT_ERR_CONN_REFUSED', 'MQTT_ERR_ERRNO', 'MQTT_ERR_INVAL', 'MQTT_ERR_KEEPALIVE', 'MQTT_ERR_NOMEM', 'MQTT_ERR_NOT_FOUND', 'MQTT_ERR_NOT_SUPPORTED', 'MQTT_ERR_NO_CONN', 'MQTT_ERR_PAYLOAD_SIZE', 'MQTT_ERR_PROTOCOL', 'MQTT_ERR_QUEUE_SIZE', 'MQTT_ERR_SUCCESS', 'MQTT_ERR_TLS', 'MQTT_ERR_UNKNOWN', 'MQTT_LOG_DEBUG', 'MQTT_LOG_ERR', 'MQTT_LOG_INFO', 'MQTT_LOG_NOTICE', 'MQTT_LOG_WARNING', 'MQTTv31', 'MQTTv311', 'MQTTv5', 'MessageState', 'MessageType', 'NamedTuple', 'PINGREQ', 'PINGRESP', 'PUBACK', 'PUBCOMP', 'PUBLISH', 'PUBREC', 'PUBREL', 'PacketTypes', 'PahoClientMode', 'PayloadType', 'Properties', 'ReasonCode', 'ReasonCodes', 'SUBACK', 'SUBSCRIBE', 'Sequence', 'SubscribeOptions', 'TYPE_CHECKING', 'Tuple', 'UNSUBACK', 'UNSUBSCRIBE', 'Union', 'WebSocketHeaders', 'WebsocketConnectionError', '_', '_ConnectionState', '_WebsocketWrapper', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_base62', '_encode_payload', '_force_bytes', '_socket', '_socketpair_compat', 'annotations', 'base64', 'cast', 'collections', 'connack_string', 'convert_connack_rc_to_reason_code', 'convert_disconnect_error_code_to_reason_code', 'errno', 'error_string', 'hashlib', 'logging', 'mqtt_ms_invalid', 'mqtt_ms_publish', 'mqtt_ms_queued', 'mqtt_ms_resend_pubcomp', 'mqtt_ms_resend_pubrel', 'mqtt_ms_send_pubrec', 'mqtt_ms_wait_for_puback', 'mqtt_ms_wait_for_pubcomp', 'mqtt_ms_wait_for_pubrec', 'mqtt_ms_wait_for_pubrel', 'os', 'platform', 'select', 'socket', 'sockpair_data', 'socks', 'ssl', 'string', 'struct', 'threading', 'time', 'time_func', 'topic_matches_sub', 'urllib', 'uuid', 'warnings']>>> (foobar) david@rp54bw64full0512:~/Support/capell $ (foobar) david@rp54bw64full0512:~/Support/capell $ (foobar) david@rp54bw64full0512:~/Support/capell $ cd Logs/Software/(foobar) david@rp54bw64full0512:~/Support/capell/Logs/Software $ pythonPython 3.11.2 (main, Apr 28 2025, 14:11:48) [GCC 12.2.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import paho.mqtt.client as mqtt>>> dir(mqtt)['AUTH', 'Any', 'CONNACK', 'CONNACK_ACCEPTED', 'CONNACK_REFUSED_BAD_USERNAME_PASSWORD', 'CONNACK_REFUSED_IDENTIFIER_REJECTED', 'CONNACK_REFUSED_NOT_AUTHORIZED', 'CONNACK_REFUSED_PROTOCOL_VERSION', 'CONNACK_REFUSED_SERVER_UNAVAILABLE', 'CONNECT', 'Callable', 'CallbackAPIVersion', 'CallbackOnConnect', 'CallbackOnConnectFail', 'CallbackOnConnect_v1', 'CallbackOnConnect_v1_mqtt3', 'CallbackOnConnect_v1_mqtt5', 'CallbackOnConnect_v2', 'CallbackOnDisconnect', 'CallbackOnDisconnect_v1', 'CallbackOnDisconnect_v1_mqtt3', 'CallbackOnDisconnect_v1_mqtt5', 'CallbackOnDisconnect_v2', 'CallbackOnLog', 'CallbackOnMessage', 'CallbackOnPreConnect', 'CallbackOnPublish', 'CallbackOnPublish_v1', 'CallbackOnPublish_v2', 'CallbackOnSocket', 'CallbackOnSubscribe', 'CallbackOnSubscribe_v1', 'CallbackOnSubscribe_v1_mqtt3', 'CallbackOnSubscribe_v1_mqtt5', 'CallbackOnSubscribe_v2', 'CallbackOnUnsubscribe', 'CallbackOnUnsubscribe_v1', 'CallbackOnUnsubscribe_v1_mqtt3', 'CallbackOnUnsubscribe_v1_mqtt5', 'CallbackOnUnsubscribe_v2', 'CleanStartOption', 'Client', 'ConnackCode', 'ConnectFlags', 'DISCONNECT', 'Dict', 'DisconnectFlags', 'EAGAIN', 'HAVE_DNS', 'HTTPHeader', 'Iterator', 'LOGGING_LEVEL', 'List', 'Literal', 'LogLevel', 'MQTTErrorCode', 'MQTTMatcher', 'MQTTMessage', 'MQTTMessageInfo', 'MQTTProtocolVersion', 'MQTT_BRIDGE', 'MQTT_CLEAN_START_FIRST_ONLY', 'MQTT_CLIENT', 'MQTT_ERR_ACL_DENIED', 'MQTT_ERR_AGAIN', 'MQTT_ERR_AUTH', 'MQTT_ERR_CONN_LOST', 'MQTT_ERR_CONN_REFUSED', 'MQTT_ERR_ERRNO', 'MQTT_ERR_INVAL', 'MQTT_ERR_KEEPALIVE', 'MQTT_ERR_NOMEM', 'MQTT_ERR_NOT_FOUND', 'MQTT_ERR_NOT_SUPPORTED', 'MQTT_ERR_NO_CONN', 'MQTT_ERR_PAYLOAD_SIZE', 'MQTT_ERR_PROTOCOL', 'MQTT_ERR_QUEUE_SIZE', 'MQTT_ERR_SUCCESS', 'MQTT_ERR_TLS', 'MQTT_ERR_UNKNOWN', 'MQTT_LOG_DEBUG', 'MQTT_LOG_ERR', 'MQTT_LOG_INFO', 'MQTT_LOG_NOTICE', 'MQTT_LOG_WARNING', 'MQTTv31', 'MQTTv311', 'MQTTv5', 'MessageState', 'MessageType', 'NamedTuple', 'PINGREQ', 'PINGRESP', 'PUBACK', 'PUBCOMP', 'PUBLISH', 'PUBREC', 'PUBREL', 'PacketTypes', 'PahoClientMode', 'PayloadType', 'Properties', 'ReasonCode', 'ReasonCodes', 'SUBACK', 'SUBSCRIBE', 'Sequence', 'SubscribeOptions', 'TYPE_CHECKING', 'Tuple', 'UNSUBACK', 'UNSUBSCRIBE', 'Union', 'WebSocketHeaders', 'WebsocketConnectionError', '_', '_ConnectionState', '_WebsocketWrapper', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_base62', '_encode_payload', '_force_bytes', '_socket', '_socketpair_compat', 'annotations', 'base64', 'cast', 'collections', 'connack_string', 'convert_connack_rc_to_reason_code', 'convert_disconnect_error_code_to_reason_code', 'errno', 'error_string', 'hashlib', 'logging', 'mqtt_ms_invalid', 'mqtt_ms_publish', 'mqtt_ms_queued', 'mqtt_ms_resend_pubcomp', 'mqtt_ms_resend_pubrel', 'mqtt_ms_send_pubrec', 'mqtt_ms_wait_for_puback', 'mqtt_ms_wait_for_pubcomp', 'mqtt_ms_wait_for_pubrec', 'mqtt_ms_wait_for_pubrel', 'os', 'platform', 'select', 'socket', 'sockpair_data', 'socks', 'ssl', 'string', 'struct', 'threading', 'time', 'time_func', 'topic_matches_sub', 'urllib', 'uuid', 'warnings']>>> (foobar) david@rp54bw64full0512:~/Support/capell/Logs/Software $ (foobar) david@rp54bw64full0512:~/Support/capell/Logs/Software $ (foobar) david@rp54bw64full0512:~/Support/capell/Logs/Software $ (foobar) david@rp54bw64full0512:~/Support/capell/Logs/Software $ pwd/home/david/Support/capell/Logs/Software(foobar) david@rp54bw64full0512:~/Support/capell/Logs/Software $ (foobar) david@rp54bw64full0512:~/Support/capell/Logs/Software $ Statistics: Posted by B.Goode — Sat Aug 30, 2025 4:50 pm