Home > Software engineering >  What Does PyCharm Do To Make It Easy To Import Other Modules?
What Does PyCharm Do To Make It Easy To Import Other Modules?

Time:03-19

I have a question regarding simple imports that I cannot get my head around.

Take a look at the attached screenshot to see my project layout. enter image description here

The file somefile.py imports the class SayHello from a file called someclass.py and calls it. someotherfile.py does the exact same thing. They both use from someclass import SayHello.

In Pycharm both files run. However, From the command line or from VSCode somefile.py runs, but someotherfile.py errors out with the following error:

ModuleNotFound: No module named 'someclass'.

I believe it has something to do with PYTHONPATH/environment variables or something like that, but every explanation I have read has confused me thus far (Even this one which I thought was going to set me strait enter image description here
If those checked Pycharm creates PYTHONPATH environment variable for you that instructs Python where to look for someclass module.

You will have to configure VSCode to define PYTHONPATH environemnt variable for python command you run and include your root project directory path on it.

CodePudding user response:

TLDR: Mess with the line starting with ./automated pointing it to various directories in your project until it works haha.

Long rambling answer: Alright now that I am not in a frenzy from trying to figure this out and it has been a day, I feel like I can make a conherint response (lets see if that is true).

So my original answer was an attempt to simplify my problem into what I thought was the issue due to a ModuleNotFound error I was getting. I had been trying to get unittests in Python inside of Visual Studio code to work (hint hint just use Pycharm it just works out of the box in there), but the integrated testing feature or whatever could not find my tests giving ModuleNotFound as the reason.

The solution to my problem actually just concerned the line ./automated-software-testsing-with-python/blog.

In the below screenshot the relevant part is ./automated-software-testing-with-python/blog. enter image description here

This is it when it is correctly configured (My tests work Woo hoo!)

Now you can go ahead and read the official documentation for what this line is doing, but I am convinced that the documentation is wrong. Due to how my code is structured and how my files are named, what the documentation says its looking for definitely does not exist. But that is another can of worms...

I actually got it to work by accident. Originally when you go though the wizard to set up what's in that screenshot above, it defaulted to ./automated-software-testing-with-python which did not work. I then manually edited it to something else that was not the below screenshot hoping to get it to work.

It was only when I pointed it to that blog directory on accident (thinking I was in a different file due to trying to debug this for hours and hours in a blind rage) that it ended up working.

I did a bunch of PYTHONPATH manipulation and Environment Variable mumbo jumbo, and I originally thought that that had an effect, but when I cloned my repot to my other machine (which did not have any of that Environment Variable PYTHONPATH stuff going on) it worked too (again, provided that the line in question pointed to blog.

Ok hopefully that might help somone someday, so I'll end it there. Not to end on a bitter sounding zinger, but I will never cease be amazed by how doing such simple things such as configuring the most basic unit test can be so difficult in our profession haha. Well now I can start working. Thanks for the help to those who answered!

  • Related