I have two pure python projects in PyCharm 3.4.1 Professional Edition. The first one, let's call it p
(like package), is structured as a setuptools package (i.e. with setup.py, all requirements etc., however it is not uploaded to pypi or any other online repository). The second one, let's call it s
(like script), is just a python script along with two modules.
Project s
is (in PyCharm) configured to use a dedicated virtualenv, let's call it venv
.
The problem I have is the following: when I install the project (package) p
in venv
like this:
$ source /path/to/venv/bin/activate
(venv)$ cd /path/to/p
(venv)$ python3 setup.py develop
in PyCharm in project s
, import p
statements are errorneous with message No module named p. However, when I run the script in s
, everything is fine, the only problem is the PyCharm IDE complaining about not being able to find the module. I can live with this but it is very annoying...
Why does this happen? Is it a PyCharm thing or packaging related thing? See NEWS below.
The project/package p
has the following structure:
p/
|
+- p/
| |
| +- __init__.py
| +- other subpackages, modules, etc.
+- setup.py
+- README, DESCRIPTION, setup.cfg, etc.
When I configure the PyCharm project p
to live in its own virtualenv and install it there in development mode, everything works fine.
NEWS
This problem is still present in PyCharm 5.0.4. However, I managed to solve it, kind-of.
For some reasons I had to install another package from pypi. I did it through PyCharm by going to File -> Settings -> Project: -> Project Interpreter, there clicking on the green +
, finding the package and pressing the Install Package button. After the installation, the package installed by python3 setup.py develop
is well recognized by PyCharm. Obviously the problem was that PyCharm didn't have some cache in sync with reality.
So the new question is, can PyCharm be told to update its caches regarding the used python environment?
I had a devil of a time getting PyCharm to recognize a class in a module that I had just written.
The problem is that PyCharm seems to default to not importing module class paths, which requires two separate fixes to correct.
Step 1
Right click on the module name, and mark it as "Source":
Step 2
For some reason, by default in PyCharm, it does not actually add directories marked as "Sources Root" to the Python path. Fix this by switching this on.
Extra for experts
Notice the "Starting Script" in the image above. I assume that manually adding these lines to your Python script would also achieve the same result.
Tested On
Solution
In the drop-down list, click Show all.... The available interpreters show up in the Project Interpreters dialog.
Select the desired interpreter.
In the toolbar of the Project Interpreters dialog box, click the button icon show paths (last option). The existing paths of the selected interpreter show up in the Interpreter Paths dialog box.
voila!! you are good to go.
Explanation
Each project refers to an interpreter which you can find in settings->project interpreter. Now this interpreter uses a bunch of Paths to look for a library. By default it has site-packages and bunch of other paths there.
Now since you used pip develop -e or python setup.py develop, a dynamic link is created pointing to your package's repository instead of a package installation in site-packages directory. So our package's source path is not here, What we need to do is to add our source path to interpreter's Paths to make it work
Ref:
The problem could be your interpreter path. Check where the interpreter is pointing to. In most cases it is ~/PycharmProjects/trials/venv/bin/python and this could be pointing to a python bath installed as part of Pycharm
Change the softlink of python to your /usr/bin/python path and things should work fine
I just had same problem like yours.
Seems pycharm can not recognize module installed directly by setup.py, but can recognize module installed by pip. Finally, I use pip install src_path, but I got to pip install it everytime I modify source code.
Sort of workaround that worked for me:
Open both projects in PyCharm in the same window (workspace). Now open up the settings window, and under "Project -> Project Depencies" you can now select that project
s
depends on projectp
. Imports and autocompletion will now work fine.I have Just installed package using Pycharm then problem solved.