Home>Article>Backend Development> How to find packages installed by python

How to find packages installed by python

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼 Original
2019-06-15 11:22:04 4714browse

How python looks for packages

Related recommendations: "python video"

How to find packages installed by python

Now There is probably not only one Python on your computer, but also more virtual environments. When installing the package, you accidentally forget to pay attention to the path of the installation package. First, let’s solve the problem of finding a bag. The answer to this question is very simple, but many people don’t know this principle. If the path of your Python interpreter is /bin/python, then when you start the Python interactive environment or use this interpreter to run a script, it will look for the following location by default:

/ lib (standard library path)

/lib/pythonX.Y/site-packages (third-party library path, X.Y is the major and minor version number corresponding to Python, such as 3.7, 2.6)

Current working directory (return result of pwd command)

If you are using the default Python on Linux, is /usr. If you compiled it yourself using the default options, is /usr/local. From the second item above, you can see that the third-party library paths of Python with different minor versions are different. If you upgrade Python from 3.6 to 3.7, the previously installed third-party libraries will no longer be available. Of course, you can copy the entire folder and there will be no problem in most cases.

Several useful functions

sys.executable The currently used Python interpreter path

sys.path The search path list of the current package

sys.prefix Currently used

Example:

>>> import sys >>> sys.executable'/home/frostming/.pyenv/versions/3.7.2/bin/python' >>> sys.path ['', '/home/frostming/.pyenv/versions/3.7.2/lib/python37.zip', '/home/frostming/.pyenv/versions/3.7.2/lib/python3.7', '/home/frostming/.pyenv/versions/3.7.2/lib/python3.7/lib-dynload', '/home/frostming/.local/lib/python3.7/site-packages', '/mnt/d/Workspace/pipenv', '/home/frostming/.pyenv/versions/3.7.2/lib/python3.7/site-packages'] >>> sys.prefix'/home/frostming/.pyenv/versions/3.7.2'

Use environment variables to add the search path

If your If the path of the package does not exist in the search path list listed above, you can add the path to the PYTHONPATH environment variable and separate multiple paths with: (for Windows;).

But be careful to avoid adding the paths of packages of different Python versions to PYTHONPATH, such as PYTHONPATH=/home/frostming/.local/lib/python2.7/site-packages, because the paths in PYTHONPATH are Prioritizes the default search path, which may cause compatibility issues if using Python 3.

By the way, PATH is the search path used to find executable programs. If you run the command my_cmd in the terminal, the system will scan the paths in PATH in order to see if my_cmd exists in this path, so if If it says that the program cannot be found or the command cannot be recognized, then you need to check whether the path has been added to PATH.

How Python installs packages

Nowadays, pip is basically used to install Python packages. Even if you use pipenv or poetry, the bottom layer is still pip, which is always applicable. . If you have not installed pip, please refer here. If you have installed it and still cannot use the pip command, please refer to the previous section.

There are two ways to run pip:

pip ... python -m pip ...

The first way and the second way are similar, the difference is that the Python interpreter used in the first way is to write In pip, generally, if your pip path is /bin/pip, then the corresponding Python path is /bin/python. The second method explicitly specifies the location of Python. This rule applies to all Python executable programs. The process is shown in the figure below.

How to find packages installed by python

Then, without adding any custom configuration, using pip to install the package will automatically install it under /lib/pythonX.Y/site-packages ( is obtained from the previous paragraph), the executable program is installed under /bin. If you need to run it directly using my_cmd on the command line, remember to add it to PATH.

Options to change the installation location in pip

--prefix PATH, replace with the given value--root ROOT_PATH, in Add ROOT_PATH in front, such as --root /home/frostming, will change from /usr to /home/frostming/usr--target TARGET, directly specify the installation location to TARGET

Virtual environment

The virtual environment is to isolate the dependency packages of different projects and install them in different paths to prevent dependency conflicts. After understanding how Python installs packages, it is not difficult to understand the principles of virtual environments (virtualenv, venv modules). In fact, running virtualenv myenv will copy a new Python interpreter to myenv/bin, and create directories such as myenv/lib, myenv/lib/pythonX.Y/site-packages (the venv module is not used for copying, but the results are basically Same). After executing source myenv/bin/activate, myenv/bin will be inserted in front of PATH, so that the copied Python interpreter will be searched first. In this way, when installing the package later, will be myenv, thereby achieving isolation of the installation path.

Summarize

You can see here that the most important thing about package path search is the path prefix, and this value is derived from the Python interpreter path used. So to find the path of the package, you only need to know the path of the interpreter. If you encounter changing the path of the package, you only need to specify the Python interpreter you want through the correct PATH setting.

Now back to the three questions at the beginning, will everyone solve them? Write your troubleshooting steps or solutions in the comment area.

The examples in this article all use Unix path conventions. If it is a Windows system, appropriate changes should be made. For example, /bin should be /Scripts↩

The above is the detailed content of How to find packages installed by python. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn