I want to add a specific library path only to python2. After adding export PYTHONPATH="/path/to/lib/"
to my .bashrc
, however, executing python3 gets the error: Your PYTHONPATH points to a site-packages dir for Python 2.x but you are running Python 3.x!
I think it is due to that python2 and python3 share the common PYTHONPATH
variable.
So, can I set different PYTHONPATH
variables respectively for python2 and python3. If not, how can I add a library path exclusively to a particular version of python?
PYTHONPATH
is somewhat of a hack as far as package management is concerned. A "pretty" solution would be to package your library and install it.This could sound more tricky than it is, so let me show you how it works.
Let us assume your "package" has a single file named
wow.py
and you keep it in/home/user/mylib/wow.py
.Create the file
/home/user/mylib/setup.py
with the following content:That's it, now you can "properly install" your package into the Python distribution of your choice without the need to bother about
PYTHONPATH
. As far as "proper installation" is concerned, you have at least three options:"Really proper". Will copy your code to your python site-packages directory:
"Development". Will only add a link from the python site-packages to
/home/user/mylib
. This means that changes to code in your directory will have effect."User". If you do not want to write to the system directories, you can install the package (either "properly" or "in development mode") to
/home/user/.local
directory, where Python will also find them on its own. For that, just add--user
to the command.To remove a package installed in development mode, do
or
To remove a package installed "properly", do
If your package is more interesting than a single file (e.g. you have subdirectories and such), just list those in the
packages
parameter of thesetup
function (you will need to list everything recursively, hence you'll use a helper function for larger libraries). Once you get a hang of it, make sure to read a more detailed manual as well.In the end, go and contribute your package to PyPI -- it is as simple as calling
python setup.py sdist register upload
(you'll need a PyPI username, though).I found that there is no way to modify
PYTHONPATH
that is only forpython2
or only forpython3
. I had to use a.pth
file.What I had to do was:
$HOME/.local/lib/python${MAJOR_VERSION}.${MINOR_VERSION}/site-packages
.pth
file in that directory.pth
file is workFor more info on `.pth. file syntax and how they work please see: python2 docs and python3 docs.
(
.pth
files in a nutshell: when your python interpreter starts it will look in certain directories and see the.pth
file, open those files, parse the files, and add those directories to yoursys.path
(i.e. the same behavior asPYTHONPATH
) and make any python modules located on those directories available for normal importing.)You can create a configuration file
mymodule.pth
underlib/site-packages
(on Windows) orlib/pythonX.Y/site-packages
(on Unix and Macintosh), then add one line containing the directory to add to python path.From docs.python2 and docs.python3: