What file do I edit, and how? I created a virtual environment.
The most elegant solution to this problem is here.
Original answer remains, but this is a messy solution:
If you want to change the PYTHONPATH
used in a virtualenv, you can add the following line to your virtualenv's bin/activate
file:
export PYTHONPATH="/the/path/you/want"
This way, the new PYTHONPATH
will be set each time you use this virtualenv.
EDIT: (to answer @RamRachum's comment)
To have it restored to its original value on deactivate
, you could add
export OLD_PYTHONPATH="$PYTHONPATH"
before the previously mentioned line, and add the following line to your bin/postdeactivate
script.
export PYTHONPATH="$OLD_PYTHONPATH"
deactivate
? –
Db PYTHONPATH
(the global one) instead of the virtualenv local path? –
Declass PYTHONPATH
is empty by default, it's just a way of augmenting the search paths available within sys.path
. This method is only meant to have it modified for the time you're in a virtualenv. –
Determine VirtualEnvWrapper
–
Isolationist pyenv
, I needed to modify ~/.pyenv/plugins/pyenv-virtualenv/bin/pyenv-sh-activate
and ~/.pyenv/plugins/pyenv-virtualenv/bin/pyenv-sh-deactivate
rather than the virtualenv's activate and deactivate scripts. (which are called for all virtualenvs not just a specific one) –
Kirovabad if
statement inside deactivate
can be if true; then... fi
–
Crimson activate.bat
file –
Megrims You can create a .pth
file that contains the directory to search for, and place it in the {venv-root}/lib/{python-version}/site-packages
directory. E.g.:
cd $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo /some/library/path > some-library.pth
The effect is the same as adding /some/library/path
to sys.path
, and remain local to the virtualenv
setup.
$VIRTUALENV_ROOT/lib/pythonX.Y/site-packages
. Docs on .pth files: docs.python.org/3.6/library/site.html –
Bullheaded pushd "$(venv/bin/python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")" ...path/to/project/venv/lib/python3.7/site-packages ...path/to/project echo ../../../../src > my_project.pth popd
Then I deactivated my virtualenv, and reactivated. I could now run project code that required knowing where my project directory was. –
Mcgriff /bin/activate
) is a malpractice and installing 3rd party tools is inferior to using built-in way to achieve the same. –
Bern sys.path
. Quoting the docs: "For each of the distinct head-tail combinations, it sees if it refers to an existing directory, and if so, adds it to sys.path and also inspects the newly added path for configuration files." –
Ahasuerus DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives
and DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead
. –
Potence sysconfig
as outlined in this answer. In a nutshell: python3 -c "import sysconfig; print(sysconfig.get_path('purelib'))"
. –
Dissatisfy .pth
file approach will add the path to the end of sys.path
whereas fiddling with PYTHONPATH
as in the currently accepted answer gives you the ability to prioritize your desired path ahead of everything else. –
Valrievalry The comment by @s29 should be an answer:
One way to add a directory to the virtual environment is to install virtualenvwrapper (which is useful for many things) and then do
mkvirtualenv myenv
workon myenv
add2virtualenv . #for current directory
add2virtualenv ~/my/path
If you want to remove these path edit the file myenvhomedir/lib/python2.7/site-packages/_virtualenv_path_extensions.pth
Documentation on virtualenvwrapper can be found at http://virtualenvwrapper.readthedocs.org/en/latest/
Specific documentation on this feature can be found at http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html?highlight=add2virtualenv
add2virtualenv -d
–
Oidium - Initialize your virtualenv
cd venv
source bin/activate
- Just set or change your python path by entering command following:
export PYTHONPATH='/home/django/srmvenv/lib/python3.4'
- for checking python path enter in python:
python
\>\> import sys
\>\> sys.path
I modified my activate script to source the file .virtualenvrc
, if it exists in the current directory, and to save/restore PYTHONPATH
on activate/deactivate.
You can find the patched activate
script here.. It's a drop-in replacement for the activate script created by virtualenv 1.11.6.
Then I added something like this to my .virtualenvrc
:
export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}/some/library/path"
The answers here really confused me. I'm not sure if I'm missing something but I found pyvenv.cfg
at venv/pyvenv.cfg
the ENTIRE contents of that file was
home = C:\Users\User\.pyenv\pyenv-win\versions\3.10.7
include-system-site-packages = false
version = 3.10.7
all I did was change \User
to \NewUser
and that stopped the error
No Python at 'C:\Users\User\.pyenv\pyenv-win\versions\3.9.6\python.exe'
But yeah, I wasted an hour on this when ctrl+shift+f solved it easily.
The Simplest way I've seen to solving this is by doing the following,
The python virtual environment PYTHON path is set in the "pyvenv.cfg" which is in the virtual environment folder.
home = C:\Users\{USERNAME}\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0
include-system-site-packages = false version = 3.11
you can edit this to your desired python version. After I made the changes I had the same error I fixed this by creating a new "pyvenv.cfg" file with the new python path and replacing it with the existing one. after deactivate your virtual environment and activate
this should work. at least it did for me
It's already answered here -> Is my virtual environment (python) causing my PYTHONPATH to break?
UNIX/LINUX
Add "export PYTHONPATH=/usr/local/lib/python2.0" this to ~/.bashrc file and source it by typing "source ~/.bashrc" OR ". ~/.bashrc".
WINDOWS XP
1) Go to the Control panel 2) Double click System 3) Go to the Advanced tab 4) Click on Environment Variables
In the System Variables window, check if you have a variable named PYTHONPATH. If you have one already, check that it points to the right directories. If you don't have one already, click the New button and create it.
PYTHON CODE
Alternatively, you can also do below your code:-
import sys
sys.path.append("/home/me/mypy")
© 2022 - 2024 — McMap. All rights reserved.
virtualenvwrapper
command. It is not part ofvirtualenv
. – Turnaround