IntelliJ conda integration - python

I have in myFile.py:
import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
print(installed_packages_list)
import rospy
I do have ros package in ros env
(ros) $ pip list | grep rospy
rospy 1.11.21
rospy-message-converter 0.4.0
If I run this file from IDEA after setting up ros conda env
/home/username/anaconda3/envs/ros/bin/python /home/username/Projects/Python/myProject/myFile.py
['argparse==1.4.0', 'catkin-pkg==0.4.9', 'certifi==2018.10.15', 'docutils==0.14', 'numpy==1.15.4', 'pip==18.1', 'pyparsing==2.3.0', 'python-dateutil==2.7.5', 'python==2.7.15', 'pyyaml==3.13', 'rospkg==1.1.7', 'setuptools==40.6.2', 'six==1.11.0', 'wheel==0.32.3', 'wsgiref==0.1.2']
Traceback (most recent call last):
File "/home/username/Projects/Python/myProject/myFile.py", line 8, in <module>
import rospy
ImportError: No module named rospy
Process finished with exit code 1
I used the following configuration:
However, if I run the same on terminal, it just works:
On terminal, even without conda activate ros:
$ /home/username/anaconda3/envs/ros/bin/python /home/username/Projects/Python/myProject/myFile.py
['actionlib==1.11.13', 'angles==1.9.11', 'argparse==1.4.0', 'base-local-planner==1.12.16', 'bondpy==1.7.20', 'camera-calibration-parsers==1.11.13', 'camera-calibration==1.12.23', 'camera-info-manager-py==0.2.3', 'capabilities==0.2.0', 'catkin-pkg==0.4.9', 'catkin==0.6.19', 'certifi==2018.10.15', 'controller-manager-msgs==0.9.7', 'controller-manager==0.9.7', 'create-dashboard==2.3.1', 'create-driver==2.3.0', 'create-node==2.3.0', 'cv-bridge==1.11.16', 'diagnostic-analysis==1.9.3', 'diagnostic-common-diagnostics==1.9.3', 'diagnostic-updater==1.9.3', 'docutils==0.14', 'dynamic-reconfigure==1.5.49', 'gazebo-plugins==2.4.16', 'gazebo-ros==2.4.16', 'gencpp==0.5.5', 'genlisp==0.4.15', 'genmsg==0.5.8', 'genpy==0.5.10', 'image-geometry==1.11.16', 'interactive-markers==1.11.3', 'kobuki-dashboard==0.4.2', 'laser-geometry==1.6.4', 'message-filters==1.11.21', 'numpy==1.15.4', 'openni2-launch==0.4.1', 'pip==18.1', 'pluginlib==1.10.7', 'pyparsing==2.3.0', 'python-dateutil==2.7.5', 'python-qt-binding==0.2.19', 'python==2.7.15', 'pyyaml==3.13', 'qt-dotgraph==0.2.33', 'qt-gui-cpp==0.2.33', 'qt-gui-py-common==0.2.33', 'qt-gui==0.2.33', 'resource-retriever==1.11.8', 'rocon-app-manager==0.7.13', 'rocon-app-utilities==0.7.13', 'rocon-apps==0.7.13', 'rocon-console==0.1.23', 'rocon-ebnf==0.1.23', 'rocon-gateway-utils==0.7.10', 'rocon-gateway==0.7.10', 'rocon-hub-client==0.7.10', 'rocon-hub==0.7.10', 'rocon-interactions==0.1.23', 'rocon-launch==0.1.23', 'rocon-master-info==0.1.23', 'rocon-python-comms==0.1.23', 'rocon-python-redis==0.1.23', 'rocon-python-utils==0.1.23', 'rocon-python-wifi==0.1.23', 'rocon-qt-library==0.7.12', 'rocon-remocon==0.7.12', 'rocon-semantic-version==0.1.23', 'rocon-uri==0.1.23', 'rosbag==1.11.21', 'rosboost-cfg==1.11.14', 'rosclean==1.11.14', 'roscreate==1.11.14', 'rosgraph==1.11.21', 'roslaunch==1.11.21', 'roslib==1.11.14', 'roslint==0.10.0', 'roslz4==1.11.21', 'rosmake==1.11.14', 'rosmaster==1.11.21', 'rosmsg==1.11.21', 'rosnode==1.11.21', 'rosparam==1.11.21', 'rospkg==1.1.7', 'rospy-message-converter==0.4.0', 'rospy==1.11.21', 'rosservice==1.11.21', 'rostest==1.11.21', 'rostopic==1.11.21', 'rosunit==1.11.14', 'roswtf==1.11.21', 'rqt-action==0.4.9', 'rqt-bag-plugins==0.4.8', 'rqt-bag==0.4.8', 'rqt-console==0.4.8', 'rqt-dep==0.4.9', 'rqt-graph==0.4.8', 'rqt-gui-py==0.4.8', 'rqt-gui==0.4.8', 'rqt-image-view==0.4.9', 'rqt-launch==0.4.8', 'rqt-logger-level==0.4.8', 'rqt-moveit==0.5.7', 'rqt-msg==0.4.8', 'rqt-nav-view==0.5.7', 'rqt-plot==0.4.8', 'rqt-pose-view==0.5.8', 'rqt-publisher==0.4.8', 'rqt-py-common==0.4.8', 'rqt-py-console==0.4.8', 'rqt-reconfigure==0.4.10', 'rqt-robot-dashboard==0.5.7', 'rqt-robot-monitor==0.5.7', 'rqt-robot-steering==0.5.9', 'rqt-runtime-monitor==0.5.7', 'rqt-rviz==0.5.7', 'rqt-service-caller==0.4.8', 'rqt-shell==0.4.9', 'rqt-srv==0.4.8', 'rqt-tf-tree==0.5.8', 'rqt-top==0.4.8', 'rqt-topic==0.4.10', 'rqt-web==0.4.8', 'rviz==1.11.19', 'sensor-msgs==1.11.10', 'setuptools==40.6.2', 'six==1.11.0', 'smach-ros==2.0.1', 'smach==2.0.1', 'smclib==1.7.20', 'tf-conversions==1.11.9', 'tf2-geometry-msgs==0.5.17', 'tf2-kdl==0.5.17', 'tf2-py==0.5.17', 'tf2-ros==0.5.17', 'tf2-sensor-msgs==0.5.17', 'tf==1.11.9', 'unique-id==1.0.5', 'warehouse-ros==0.8.8', 'wheel==0.32.3', 'world-canvas-client-py==0.1.0', 'world-canvas-server==0.1.0', 'world-canvas-utils==0.1.0', 'wsgiref==0.1.2', 'xacro==1.9.5']
So IDEA is not executing the printed command? Is it running something else? Why do I see way less installed packages for the conda env ros running from inside IDEA and how do I resolve this issue?
I'm on
IDEA 2018.3
Ubuntu 14.04
Update:
I have configured the conda env and I verified it like this:
On terminal:
$ conda activate ros
(ros) $ python
Python 2.7.15 |Anaconda, Inc.| (default, Nov 13 2018, 23:04:45)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.executable)
/home/username/anaconda3/envs/ros/bin/python
On Python Console from IDEA > Tools > Python Console
PyDev console: starting.
Python 2.7.15 |Anaconda, Inc.| (default, Nov 13 2018, 23:04:45)
[GCC 7.3.0] on linux2
import sys
print(sys.executable)
/home/username/anaconda3/envs/ros/bin/python

When you tried to run this script in the system terminal (outside of IDEA), were you using the same interpreter? If not, please try again but use the same interpreter you use in IDEA. Do you have the same error?
If not, try the following:
run import os in the system terminal using the same interpreter
run print(os.environ['PATH'])
copy the result and add as PATH environment variable to your Run/Debug Configuration

Related

Installed Libraries are not being found by my IDE (Mac) [duplicate]

I am trying to import pyodbc module on a windows computer. It works in the terminal, but not the IDLE. The error message in IDLE is:
Traceback (most recent call last):
File "FilePath/Filename.py", line 3, in <module>
import pyodbc
ImportError: No module named pyodbc
This typically occurs when multiple versions of python are installed with different paths. You can check to see if you have multiple installations by opening up the IDLE terminal and using
import sys
sys.version
sys.path
These commands will print the system PATH and version of the current instance of python. Use this in both IDLE and the command line terminal to see where each differ. Once you know which version is the one you want then just remove the other. You could also remove all python instances and then reinstall a clean python environment but then you would have to re-install all of your modules using pip or easy_install
Open python in cmd (type python and press enter)
Import the module in cmd (type import modulename)
Type modulename.__file__
You will get the path where the module is stored
Copy the corresponding folder
In IDLE, import sys and typing sys.executable to get the paths where it looks for modules to import
Paste your module's folder in the path where IDLE looks for modules.
This method worked for me.
You can pip show after install package and know about location where package installed.
After that check in IDLE sys.path and if directory with package not in sys.path try to add it.
import sys
sys.path.append("/home/dm/.local/lib/python3.6/site-packages")
# or another folder that `pip show` about package.
this happen because of multiple python installed (32bit version, 64bit version) or 3v and 2.7v so to solve this problem you have to invoke the idle for that specific version like this
cd to the dir of the version that the import work fine in cmd in that folder type this command below
pythonw.exe Lib\idlelib\idle.pyw
this command will invoke idle for that version
and the import will work fine
Me too had the same issue while trying to import a module which was successfully imported on terminal and not able to install on IDLE.
How I fixed?
Assuming you know how to execute commands on terminal as well as inside of python interpreter
Open your Terminal & execute the below commands :
:~$ python3
Python 3.6.9 (default, Jan 26 2021, 15:33:00)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
>>> import sys
>>> sys.version
'3.6.9 (default, Jan 26 2021, 15:33:00) \n[GCC 8.4.0]'
>>> sys.path
['', '/usr/lib/python36.zip', '/usr/lib/python3.6',
'/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-
packages', '/usr/lib/python3/dist-packages']
>>>
Now import your module inside of your python3 interpreter.
>>> import nester
>>>
>>> nester.__file__
'/usr/local/lib/python3.6/dist-packages/nester.py'
>>>
Open your IDLE and run the below commands and compare them
Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec 7 2020, 17:08:21) [MSC v.1927
64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more
information.
>>> import sys
>>> sys.version
'3.9.1 (tags/v3.9.1:1e5d33e, Dec 7 2020, 17:08:21) [MSC v.1927 64 bit
(AMD64)]'
>>> sys.path
['','C:\Users\username\AppData\Local\Programs\Python\Python39\Lib\idlelib', 'C:\Users\username\AppData\Local\Programs\Python\Python39\python39.zip', 'C:\Users\username\AppData\Local\Programs\Python\Python39\DLLs', 'C:\Users\username\AppData\Local\Programs\Python\Python39\lib', 'C:\Users\username\AppData\Local\Programs\Python\Python39', 'C:\Users\username\AppData\Local\Programs\Python\Python39\lib\site-packages']
>>> sys.executable
'C:\Users\username\AppData\Local\Programs\Python\Python39\pythonw.exe'
Now if you compare both outputs from Terminal & IDLE,
Terminal Module location is different from IDLE
I was using Ubuntu 18 terminal on windows machine
So I just copied my file to 'C' directory and ensured its file privileges. That's it.
:~$ cp -p /usr/local/lib/python3.6/dist-packages/nester.py /mnt/c/Users/username/AppData/Local/Programs/Python/Python39/Lib/
It worked!!
I Found the solution. It works for me
The problem is your installation directory does not match with the python version directory.
solution is >>>
type %localappdata% in your search bar then go to this folder.
here select the program folder. then select Programs , Python , Python version , Scripts
copy the location of the Scripts folder
open command prompt and type cd //yourpath (in my case cd C:\Users\3C HOUSE\AppData\Local\Programs\Python\Python37\Scripts)
if you wanna install numpy , now run pip install numpy
When you put your python scripts that have import pandas in the same folder as the site packages like pandas for example and use the same version of python that is used on CMD, it should help run your scripts in IDLE.
Check the path of your code, and that of the module. Copying the module to the path where code is worked for me.
'sys.executable' will give the path where code is stored.
For windows, open command prompt and enter pip show pyodbc to get the path of package and copy the path.
then open idle and run these lines
import sys
sys.path
Match the path from command prompt and the paths mentioned in the list provided by running above lines in IDLE. If the path is not mentioned then run these lines in idle
sys.path.append("Enter the copied path of package here")
After executing these lines, check again by importing the package that if it works for you.

/usr/local/bin/python3: bad interpreter: No such file or directory for ubuntu 14.04

Hi My python installation is in different directory and i am using a docker image which is mac based and it is referring shebang line as /user/local/bin/python3 from other folder in shell script .
my python installation path
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/myuser/project', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']
>>>
so is there a way without changing the shebang line i can redirect or link to my installation of python3 to get out of this error.
is it recommended to install python3 in given path. ?
please advice.
If you can't modify the shebang of the file, and you have access to the Dockerfile that creates your docker image, you can add a command directive to create a symbolic link: ln -s /usr/bin/python3 /usr/local/bin/.
If you don't have access to the Dockerfile. Then you can run the above command from within the running docker instance. That should solve your issue without having to modify the file.
https://docs.docker.com/engine/reference/builder/#cmd
You could set you shebang to "/usr/bin/env python" as usual, then set your path appropriately so that the correct version of python is on the path for your executable. In bash you can set the path on the command line using:
PATH=python/path:$PATH app
I will sometimes ignore the shebang and type python/path/python $(which app) in order to control which python interpreter is running.

Shebang for scripts not working

I am using PythonAnyhwere for my django production environment. I have a script which should run on scheduled basis.
Since I installed django in a virtualenv, the script starts like
#!/usr/bin/env python
activate_this = '/home/myname/.virtualenvs/myenv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
The error I get for this is
/usr/bin/env python: no such Python interpreter
No problem. So I changed it to
#!/usr/bin/env python2.7
Then I got
/usr/bin/env python2.7: no such Python interpreter
or
/usr/bin/env python3.4: no such Python interpreter
I said ok, what if I don't have a shebang line at all?
Error in log:
line 1: activate_this: command not found
line 2: syntax error near unexpected token `activate_this,'
line 2: `execfile(activate_this, dict(__file__=activate_this))'
What is the way then?
You can know where your Python interpreter by typing
$ which python
Also you try something like this (or maybe without env):
$ env python
Python 3.5.0 (default, Sep 20 2015, 11:28:25)
[GCC 5.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.path
<module 'posixpath' from '/usr/lib/python3.5/posixpath.py'>
And then change lib to bin and omit /posixpath.py part

Pycharm 4 no module named ROOT, when importing a locally installed module (PyROOT), that is working fine from shell on Mac OS X Yosemite

I am trying to set up PyROOT to work with Pycharm 4 on Mac OS X Yosemite.
I have installed ROOT (locally), with the python option enabled, and set up all of the necessary environment paths.
echo $PYTHONPATH
/Users/natalia/Software/root/lib:/Users/natalia/Software/root/bin:/Users/natalia/Software/root
It works just fine from the shell interpreter:
python
Python 2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import ROOT
>>> ROOT.__file__
'/Users/natalia/Software/root/lib/ROOT.pyc'
>>>
In Pycharm I have tried to add these paths to the interpreter using Preferences->Project Interpreter->More->Show paths...
The paths that show there are the following:
file:///Library/Python/2.7/site-packages/pip-6.1.1-py2.7.egg
file:///Users/natalia/Software/root/lib
file:///System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
file:///System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
file:///System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
file:///System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
file:///System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
file:///System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
file:///System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload
file:///System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC
file:///Library/Python/2.7/site-packages
file:///Users/natalia/Software/root/bin
file:///Users/natalia/Software/root
I created the following file in Pycharm:
import os
os.system("echo $PYTHONPATH")
import ROOT
When run, it returns this:
Traceback (most recent call last):
/Users/natalia/Software:/Users/natalia/Software/root:/Users/natalia/Work/Projects/untitled
File "/Users/natalia/Work/Projects/untitled/l.py", line 3, in <module>
import ROOT
ImportError: No module named ROOT
Notice how this PYTHONPATH that's printed from python in Pycharm doesn't include (for a reason unknown to me) the path that actually includes the ROOT.pyc file, that is: '/Users/natalia/Software/root/lib'
I have also tried doing the dirty trick of
os.system("export PYTHONPATH=$PYTHONPATH:/Users/natalia/Software/root/lib")
but I found it doesn't actually change the path if I print it afterwards.
I am absolutely confused as to where Pycharm gets the paths from.
Any possible solutions would be welcome and greatly appreciated.
You may have figured this out already, but just in case...
import sys
sys.path.append('/Applications/Misc/root/lib')
import ROOT
print ROOT.TTimeStamp().AsString()
will add that search path to Python (& PyCharm by extension); the snippet gives me the following output in PyCharm:
/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
/Users/rrios/PycharmProjects/untitled/dummy.py
Thu, 02 Jul 2015 01:07:57 UTC +628998000 nsec
Process finished with exit code 0

Can't import the cx_Oracle module unless I'm using an interactive shell

When using Python on an interactive shell I'm able to import the cx_Oracle file with no problem. Ex:
me#server~/ $ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>>
As you can see, importing works without a hitch. However, when I try to run a Python script doing the same thing, I get an error:
me#server~/ $ sudo script.py
Traceback (most recent call last):
File "/usr/local/bin/script.py", line 19, in <module>
import cx_Oracle
ImportError: No module named "cx_Oracle'
Here is the important section from script.py:
# 16 other lines above here
# Imports
import sys
import cx_Oracle
import psycopg2
...
I'm befuddled here. Other pertinent information is the server I'm running is Ubuntu 14.04.1 LTS (upgraded from 12.04) 64bit. which python and sudo which python both point to the same location. Also, doing this as root via sudo su - gets the same results; import OK from interactive but error from script.
Nothing other than the OS upgrade happened between when this worked and when it stopped working.
Sorry, all. This was a silly on my part. Turns out the script in question was using Python3, and when the server upgraded, Python3 went from being 3.2 version to being 3.4 version.
Once the cx_Oracle module was set up in the 3.4 version, everything worked as expected.
Phil, your final note talking about the shebang was what lead me to discover this, so kudos to you! The reason I didn't mark your response as the answer was because technically it wasn't but led me on the right path.
Cheers!
sudo starts a new bash environment which is then pointing to a different python executable (different installed modules).
You can verify this with which python and sudo which python
EDIT: so if they point to the same executable, then you should look at sys.path to find differences. In both environemnts you can:
python -c "import sys; print('\n'.join(sys.path))"
sudo python -c "import sys; print('\n'.join(sys.path))"
Look for differences. If there are none:
A common error in import situations like this is that python will first look at the local dir. So if you happen to be running python and importing something what is found locally (i.e. cx_Oracle is a subdir of your current location), you will get an import error if you change directories.
Final note: I have assumed here that the shbang of the script.py points to the same executable as which python. That is, that python script.py and script.py return the same error.

Categories