Module Not Found - virtual Environment - python

I am getting in error
I am currently using mac
I have created a virtual environment - name of virtual environment: venv
Even if I have installed the modules I am getting module not found error.
I have tried many things
pip list gave me output which shows that the pandas is installed
I also did -> sys.path
The path to my virtual environment is this :
/Users/nidhivanjare/Desktop/ML/venv

The reason might be because you transferred your virtual environment folder to another location (or you copied it from another computer)
This is how to fix it:
Open the /Scripts/activate file inside your virtual environment folder.
Go to the line that has this:
VIRTUAL_ENV="$(if [ "$OSTYPE" "==" "cygwin" ]; then cygpath -u 'Z:\<your NEW folder>'; else echo '/Z/<your NEW folder>'; fi;)"
Change the path to the new location of your virtual environment.
Change it from
Z:\<your OLD folder> and /Z/<your OLD folder>
to
Z:\<your NEW folder> and /Z/<your NEW folder>
If you are using the Command Prompt of Windows, you also have to change the path in the file /Scripts/activate.bat
set "VIRTUAL_ENV=Z:\<folder>"

The standard venv needs a dot before the activate command, like
. ./venv/bin/activate. The first dot is your shell's source command.

Related

How can I use a specific python interpreter to run my python file

I created a python file and used some packages. I installed packages on a virtual Environment. Now, when I try to run that file, it run on the default installed interpreter and I have to activate the virtual Environment every time I have to run that file. Is there any way possible to do that.
In conclusion: The code from which the file can select the place where to look for the packages.
You can add the path to the virtual environment's interpreter directly to the shebang at the top of the script. For example, if your virtual environment is stored at /home/ishant/venv, the shebang would be
#!/home/ishant/venv/bin/python
Then, if you execute your script directly (after making it executable with chmod +x or the like), your virtual environment will be used.
(Activating a virtual environment simply updates your PATH variable so that python resolves to the virtual environment, rather than your "regular" environment. You can always access the tools in the virtual enivironment directly instead.)
Command line only (Linux)
Put this in your ~/.bashrc and create the virtual env with name 'venv' inside the project root:
function cd() {
if [[ -d ./venv ]] ; then
deactivate
fi
builtin cd $1
if [[ -d ./venv ]] ; then
. ./venv/bin/activate
fi
}
When cd-ing into a directory, it searches for a virtualenv named venv and disables when leaving.
Alternative with absolute paths (Linux and Windows)
In cases where you want to run the script without a bash, you could run it with the absolute path to the python interpreter inside the virtualenv.
This is from inside the project dir:
# Posix:
/path/to/virtualenvname/bin/python run.py
# Windows:
C:\path\to\virtualenvname\Scripts\python.exe run.py
Or if you want to execute it from outside of the project dir:
# Posix:
/path/to/virtualenvname/bin/python /path/to/projectdir/run.py
# Windows:
C:\path\to\virtualenvname\Scripts\python.exe C:\path\to\projectdir\run.py
Okk So i got your point what i think is why not to add some function in your code so that whenever you excute it it will automatically use vitual environment
--code for linux
import os
os.system("source <virtualenv_name>/bin/activate")
--code for windows
import os
os.system("<virtualenv_name>/bin/activate")
And at last line add
os.system("deactivate")
Add these lines to beginning of your programm see if it works.
May this help you solving your probelem
Thanks!!

Why doesn't my project's virtual env auto-launch in VS Code?

VS Code v1.58.1
Python v3.92
In a python project, I set up a virtual environment. In this project folder, I have a sub-folder .vscode that contains a file settings.json, which has the following contents (pointer to the project's virtual environment folder):
{
"python.defaultInterpreterPath": "D:\\Documents\\coding\\pyproj1\\proj_env\\Scripts\\python.exe",
"python.terminal.activateEnvironment": true
}
When I open this project folder in VS Code, the powershell terminal does not automatically launch the virtual environment, and in the lower left corner of VS Code, the virtual environment python interpreter is not listed. When I run a new terminal in VS Code, the virtual env is still not activated.
I had the same problem when I was using python.pythonPath which I understand is now deprecated in favor of python.defaultInterpreterPath.
If I leave VS Code alone for a few minutes after opening the project folder, it will sometimes select the virtual env interpreter. But since I'm telling VS Code where it is, why isn't it selecting this at folder open?
Where am I going wrong?
The python.defaultInterpreterPath setting only works at the first time.
After you manually select the python interpreter, the VSCode will remember it. When you reopen the VSCode, it will select the interpreter the last time you have selected. And the python.defaultInterpreterPath setting will have no influence anymore.
But you take this command to reset it: Python:Clear Workspace Interpreter Setting.
Update:
You can set the python.defaultInterpreterPath like this:
"python.defaultInterpreterPath": ".venv\\Scripts\\python.exe"
It looks like has some problem with your Python extension or the cache.
Could you try to:
Reinstall the python extension. Remember to delete the extension folder under: C:\Users\${UserName}\.vscode\extensions
Delete all the files under these locations:
C:\Users\${UserName}\AppData\Roaming\Code\User\globalStorage
C:\Users\${UserName}\AppData\Roaming\Code\User\workspaceStorage
Or you can empty the folder of:
C:\Users\${UserName}\AppData\Roaming\Code
But remember to storage the settings.json under
C:\Users\${UserName}\AppData\Roaming\Code\User
As described in the earlier comment: "So it seems my issue is that VS Code does not remember the interpreter I used last time."
What resolved the issue is deleting the virtual env and recreating it. Now when I open the project folder, VS Code auto activates the virtual env.
Steps involved for anyone wishing to do the same:
activate virtual env
create requirements file: pip freeze > requirements.txt
deactivate to exit venv
rm proj_env or whatever the name of the venv folder is
create virtual env, e.g., python -m venv proj_env
activate the virtual env (VS Code may detect the venv during creation, and ask if you wish to activate venv, go ahead and say Yes)
pip install -r requirements.txt to install the requirements into the virtual env

Auto activate virtual environment in Visual Studio Code

I want VS Code to turn venv on run, but I can't find how to do that.
I already tried to add to settings.json this line:
"terminal.integrated.shellArgs.windows": ["source${workspaceFolder}\env\Scripts\activate"]
But, it throws me an 127 error code. I found what 127 code means. It means, Not found. But how it can be not found, if I see my venv folder in my eyes right now?
I think it's terminal fault. I'm using Win 10 with Git Bash terminal, that comes when you install Git to your machine.
This is how I did it in 2021:
Enter Ctrl+Shift+P in your vs code.
Locate your Virtual Environment:
Python: select interpreter > Enter interpreter path > Find
Once you locate your virtual env select your python version:
your-virtual-env > bin > python3.
Now in your project you will see .vscode directory created open settings.json inside of it and add:
"python.terminal.activateEnvironment": true
don't forget to add comma before to separate it with already present key value pair.
Now restart the terminal.
You should see your virtual environment activated automatically.
Actually the earlier suggested solutions didn't work for me, instead I added the following in my settings:
"settings": {
"python.terminal.activateEnvInCurrentTerminal": true,
"python.defaultInterpreterPath": "~/venv/bin/python"
}
Of course replace the defaultInterpreterPath (used to be pythonPath) setting with your own path (so don't copy/paste the second line).
You don't need this line at all. Just remove it and switch your Python interpreter to point to the one within your venv. Here's a relevant documentation (italicized emphasis mine):
To select a specific environment, use the Python: Select Interpreter
command from the Command Palette (Ctrl+Shift+P).
... and
opening a terminal with the Terminal: Create New Integrated Terminal
command. In the latter case, VS Code automatically activated the
selected environment.
Once you switch the interpreter VS code should create a .vscode folder within your workspace with a settings.json indicating the python interpreter. This will give VS code the direction of where to locate the venv.
There is a new flag that one can use: "python.terminal.activateEnvironment": true
my scenario was pretty much the same. I am running VSCode on Windows, wanting to used git bash as my default Terminal but after the venv got created, it was doing some weird stuff when a Terminal would open where it couldn't find the correct python interpeter in the venv/Scripts folder even though I did ctrl-shift-p a bunch of times to reset it to the python.exe there. I also wanted to make sure the activate script was run on Terminal open. I just couldn't get the debugger to work right and it kept complaining that it could not find the python interpreter, so I basically couldn't debug at all.
So for anyone who is having weird stuff happen trying to use a Git Bash Terminal in VSCode in Windows related to a python project using a virtual env, here is what I found out;
I noticed that when I opened a new Git Bash Terminal, and looked at the $PATH variable to make sure it could find the interpreter in the venv, the path to the venv/Scripts folder would be prepended to the $PATH, but not with linux path separators like everything else in $PATH but with a Windows style path;
echo $PATH
C:\Users\blah\Documents\blah\Stock-down\Dev\this_api\venv/Scripts:/c/Users/blah/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/Users/blah/bin:/c/Program Files/Go/bin:/c/Python39/Scripts:
So whenever I would try to debug, or just even run which python, It would get confused and thought the interpreter was in here;
which python
C:\Users\blah\Documents\blah\Stock-down\Dev\this_api\venv/Scripts/C/Users/blah/Documents/blah/Stock-down/Dev/this_api/venv/Scripts/python.exe
I ran the "printenv" command in the Terminal to see what env vars were getting set and why the venv interpreter path was getting messed up. And I found a env var I didn't know existed - VIRTUAL_ENV. But I didn't know how it was getting set or where it came from. After some pain, and hunting around I found it - when you run "python -m venv venvname" to create the virtual env in the project folder, as you know, it creates the activate (and activate.bat for windows) scripts in the ./venv/Scripts folder. Inside these files this VIRTUAL_ENV variable is not only exported, but but prepended to the $PATH variable on Terminal open with the "/Scripts" folder name added in linux path style. The problem with is that it sets the VIRTUAL_ENV value with windows type path - I know its painful and wrong to do this, but I just changed it to what Git Bash is expecting, see below;
#unset irrelevant variables
deactivate nondestructive
#VIRTUAL_ENV="C:\Users\blah\Documents\blah\Stock-down\Dev\this_api\venv"
VIRTUAL_ENV="/c/Users/blah/Documents/blah/Stock-down/Dev/st_api/venv"
export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/Scripts:$PATH"
export PATH
Now when a new Git Bash Terminal is opened it prepends the venv/Scripts path correctly to $PATH;
echo $PATH
/c/Users/blah/Documents/blah/Stock-down/Dev/st_api/venv/Scripts:/c/Users/blah/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/Users/blah/bin:/c/Program Files/Go/bin:/c/Python39/Scripts:
I also made a copy of the executable python.exe in the ./venv/Scripts dir and just called it "python" and now the command "which python" works and I can debug fine. I still set ctrl-shift-P when I choose the interpreter in VSCODE to "python.exe" when I just use "find" during the selection.
For more information on VIRTUAL_ENV var, see this doc -- python venv docs
It feels like jumping through a bunch of hoops I know, but this way I can open a new Git Bash Terminal, have the activate script run correctly on Terminal Open, debug, and operate normally without having to float between Git Bash AND WSL Ubuntu AND Powershell, etc.
My environment started to activate automatically after the advice from this article
When you create a new virtual environment, a prompt will be displayed
to allow you to select it for the workspace. This will add the path to
the Python interpreter from the new virtual environment to your
workspace settings. That environment will then be used when installing
packages and running code through the Python extension. For examples
of using virtual environment in projects, see the Python, Django, and
Flash tutorials.
My solution was to create /.vscode/settings.json manually
Here is the tree;
├───django
│ ├───.vscode
│ │ ├───settings.json
I created /.vscode/settings.json then added this code in settings.json (I am using windows so I used double backslash for path location otherwise it gives unicode error, and don't copy paste this, find your own .virtualenvs)
{
"python.defaultInterpreterPath": "C:\\Users\\Talha\\.virtualenvs\\django-okd21pq9\\Scripts\\python.exe"
}

Activating python virtual environment does not switch to local versions of pip and python commands

I have created a virtual enviroment using virtualenv command with a standard procedure. Now, when I activate it or deactivate, the output of which pip or which python gives me same output /usr/local/bin/pip. However there is copies of python and pip commands in my vitrual enviroment directory - I have found them there. What might be the problem?
Did you move the virtual environment folder to a different name? The original path to the virtual environment is written into the generated activate script so if you move the environment activate will set your path to the old path of the virtual environment.
To fix this run virtualenv --relocatable $YOUR_VIRTUALENV_PATH then modify the VIRTUAL_ENV variable in the activate script to point to your new location.
I think it happen when I moved the environment folder to a different location.
I solved it by reinstalling virtualenv and creating a new environment

setting up Django Virtual Env error "The executable /var/bin/python (from --python=/var/bin/python) does not exist"

I was given a project to work on and am now trying to run that project in a virtual environment.
I am new to python, but in the past, I was comfortable with the "manage.py runserver" concept. I'm having trouble learning virtual environments.
I know that I have virtualenv installed.
My first direction given to run the virtual environment for this project was to run virtualenv --python=/var/bin/python --clear --no-site-packages --unzip-setuptools --setuptools ~/virtualenvs/project_name
That results in this error:
The executable /var/bin/python (from --python=/var/bin/python) does not exist
I already have python installed, what does this even mean? I am also confused about this syntax, --python=/var/bin/python, was that a relative path that I should have switched out "python=/" for something else? what does the "=/" actually represent?
Am I running the command in the wrong folder? I have tried running it in both the outer project_name folder, containing a subfolder of the same name, and also, inside that subfolder (which contains the manage.py).
However, I can't find the var/bin/... paths anywhere in either folder. Where should the bin paths be located?
Any help or insights would be much appreciated, thanks!
If you are new to virtual environments, these are the steps I would take to install a virtual environment. I hope this helps.
Setuptools
First to check if you already have it installed type the following:
python
>>>import setuptools
If you get another >>> then you have it installed, otherwise you'll get an error. If you happen to blow up setuptools, here's how you reinstall it:
http://pypi.python.org/pypi/setuptools
1.Download Python 2.7 egg
2.Change directory into new unzipped folder
3.Run the following command:
sudo sh ~/folder/you/downloaded/to/setuptools-0.6c11-py2.7.egg
Virtialenvwrapper
sudo pip install virtualenvwrapper
Setup
1.Create your directories
sudo mkdir /project_name
sudo chown -R yourusername:admin /project_name
2.Find virtualenvwrapper.sh to use in step 3 below, check the following paths:
/Library/Frameworks/Python.framework/Versions/2.6/bin/virtualenvwrapper.sh
/usr/local/bin/virtualenvwrapper.sh
3.Update your profile script (~/.bash_profile or ~/.profile) in a text editor, adding the lines below at the bottom of the file. If you don't have either of these files in your home directory, create a file named .bash_profile in your home directory.
export WORKON_HOME=$HOME/.virtualenvs
source /insert/your/path/to/virtualenvwrapper.sh
4.Quit your Terminal app and restart it. You should see a bunch of folders get created when you restart it. This will only happen once.
5.Make your environment
mkvirtualenv django
(django)$ <- now you are in your new virtualenv
6.To leave your environment:
(django)$ deactivate
7.To enter your environment, quit Terminal again to reset paths so we can test our setup and move into your working directory to checkout a project:
workon django
(django)$ <- you are back in your environment
It seems like that python is not installed in /var/bin/python on your machine. The path seems a bit odd, a more common path is /usr/bin/python.
One way to check where python is installed is to run which python. Try to replace /var/bin/python in the command you use when creating the virtualenv with the result from the which command.
#Try this step by step procedure
1. open terminal
pip install virtualenv
2. cd desktop
desktop> virtualenv env
# A folder named env will appear on your desktop
3. desktop > cd env
#now activate the virtualenv
desktop/env>.\Scripts\activate
# now you will see
(env)c:\...\desktop\env>

Categories