Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I am creating a docker containing python and php. I am writing a python script to connect to a MQTT broker residing in another docker.

In my dockerfile I ensure that I install the paho client by using the following commands:

RUN apt-get install -y python3-dev 
RUN apt-get install -y libffi-dev 
RUN apt-get install -y libssl-dev
ADD https://bootstrap.pypa.io/get-pip.py /tmp/get-pip.py 
RUN cat /tmp/get-pip.py | python3 
RUN pip install paho-mqtt 
RUN pip install python-etcd

However when I run the python script I get the following error:

ImportError: No module named paho.mqtt.client

The docker installation does not show any error with regards to paho-mqtt installation. It will be great if someone can guide on this.

@frlan I tried with python 2.7 but now the script does not even seem to execute. Should I attach my entire Dockerfile? – Sid411 Jan 5, 2017 at 11:34 @Sid411 I think mqtt is not being installed properly. Could you verify it from the pip list command? What do you get when you run the python --version command? I can install and import it with no problem in Python 3.6. – Eddie Jan 5, 2017 at 12:01

I think I have found the problem,

You have installed Python3 but for some reason the interpreter defaults to version 2.7 in Linux.

Try using pip3 install paho-mqtt python-etcd instead.

Or if it does not work, you can literally copy and paste the paho folder from your Python2.7 site-packages folder to your Python3 site-packages folder. I have just verified paho-mqtt 1.2 for Python2 is exactly the same as paho-mqtt 1.2 for Python3 using a Meld diff tool. Please note, when you directly copy and paste pip list will not display the package you copied.

site-packages are usually inside your system lib folder. It depends upon how Python is installed. In my case everything is inside $HOME/.pyenv folder.

Remember Python2 has it's own site-packages folder and Python3 has it's own site-packages folder where Python searches for the packages. Sometimes if you are using a Debian based Linux distro please make sure to check inside the dist-packages folder as well to see if you can find the package you are looking for.

They are essentially the same thing. I don't know why but the Debian based package managers love to use dist-packages instead. – Eddie Jan 6, 2017 at 11:07 @Sid411 Im glad it helped. Please be aware it is not pip friendly to manually copy and paste. – Eddie Jan 6, 2017 at 23:10

Once you have the code, it can be installed from your repository as well:

cd paho.mqtt.python
python setup.py install
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.