Pythonのpipとimportの関係。top_level.txtとか。


目的

pip(インストール)やimportがグダグダになると、出端をくじかれるので、、、、
少し、調べた。

以前に示した例を含め、install時の名称と、importの名称が違うものがある。
違っていても、別に困らないのだが、
なんか、これに、import時のエラーとかが加わると(実際に加わったのだが、、、)、
少し、整理しないと、適当な試行錯誤になるので、少し、整理。

  役立つかなーと思う情報(とり急ぎ)

    importするときの名称は、top_level.txtに書かれているよう。

install名と、import名が違う例

install名 import名
opencv-python cv2
pillow PIL

pip コマンド

少し、話がずれるが、pipのコマンドの例を示す。

pip list

c:\_tmp>python -m pip list
Package              Version
-------------------- --------
absl-py              0.7.1
apipkg               1.5
...
numpy                1.16.4
...
opencv-python        4.1.0.25
pandas               0.25.0
...
pickleshare          0.7.5
Pillow               6.1.0
pip                  19.2.1
...
zipp                 0.5.1

c:\_tmp>


pip show

c:\_tmp>python -m pip show opencv-python
Name: opencv-python
Version: 4.1.0.25
Summary: Wrapper package for OpenCV python bindings.
Home-page: https://github.com/skvark/opencv-python
Author: None
Author-email: None
License: MIT
Location: c:\users\XYZZZ\appdata\local\programs\python\python37\lib\site-packages
Requires: numpy
Required-by:

c:\_tmp>python -m pip show pillow
Name: Pillow
Version: 6.1.0
Summary: Python Imaging Library (Fork)
Home-page: http://python-pillow.org
Author: Alex Clark (Fork Author)
Author-email: [email protected]
License: UNKNOWN
Location: c:\users\XYZZZ\appdata\local\programs\python\python37\lib\site-packages
Requires:
Required-by: PyScreeze, PyAutoGUI

importのときの名称を使うと、無視される。
↓無視するのは、どういうこと!!!!!
知りませんとか、なぜ、出ないのか?このあたりが、少し、
わがままな感じがする。

c:\_tmp>python -m pip show cv2

c:\_tmp>

pip install バージョン指定あり(余談)

>や<を使う場合は、'とかで、囲む必要がある。
ただ、このような指定をしたinstallで、いいことがあった経験は、いまのところ、
たしか、一度もない。

$ pip install SomePackage            # latest version
$ pip install SomePackage==1.0.4     # specific version
$ pip install 'SomePackage>=1.0.4'     # minimum version

仕様書

helpとかは、充実してない感じなので、以下の文書をみるのがいいと思う。

import関連

importするときの名称は、top_level.txtに書かれているよう。

一言だけ入っている。

top_level.txt
cv2

仕様書(top_level.txtについて)

以下に仕様の説明がある。
https://setuptools.readthedocs.io/en/latest/formats.html

top_level.txt – Conflict Management Metadata
This file is a list of the top-level module or package names provided by the project, one Python identifier per line.
Subpackages are not included; a project containing both a foo.bar and a foo.baz would include only one line, foo, in its top_level.txt.
This data is used by pkg_resources at runtime to issue a warning if an egg is added to sys.path when its contained packages may have already been imported.
(It was also once used to detect conflicts with non-egg packages at installation time, but in more recent versions, setuptools installs eggs in such a way that they always override non-egg packages, thus preventing a problem from arising.)

まとめ

わずかに、情報が増えた。
エラーに向き合いやすくなった気がする。

関連(本人)

Python インストール名とインポート名が違う。よくあることか?(install pillow,import PIL)
pythonをストレスなく使う!(generatorに詳しくなる。since1975らしい。)
pythonをストレスなく使う!(Pythonでは、すべてがオブジェクトとして実装されている)
pythonをストレスなく使う!(Pylintに寄り添う)
pythonをストレスなく使う!(ExpressionとStatement)
英語と日本語、両方使ってPythonを丁寧に学ぶ。

今後

コメントなどあれば、お願いします。