通常在ruby
生态系统中使用rubygems
或JavaScript生态系统中的npm
/yarn
时,软件包安装在$PATH
的某个位置,或者至少指示您将软件包安装位置添加到路径$PATH
。
似乎在python
生态系统中pip
从未强调过这一点。相反,我们鼓励您通过python -m <name>
等运行模块。
对我来说似乎有点奇怪,这只是一个设计决定吗?将site-packages
或pip
正在使用的任何位置放入$PATH
是好的做法吗?有时将二进制文件添加到/usr/local/bin
(有时使用与包本身不同的名称,例如django-admin
而不是django
pip install Django
而二进制通常与ruby
/JavaScript 生态系统中的包名称相同(,例如,我明白了,但一直都是这样吗?
你混淆了$PATH
和$PYTHONPATH
.site-packages
用于库,$PATH
用于程序(二进制文件和脚本(。pip
将库安装到其site-packages
中,将脚本安装到相应的bin/
目录中;例如,如果site-packages
/usr/local/lib/pythonX.Y/site-packages
脚本将安装到/usr/local/bin/
中。
pip
不检查/usr/local/bin/
是否在$PATH
。好吧,我同意你的看法——它应该检查并提醒用户将bin/
目录添加到$PATH
,如果它还没有。
当您运行安装的二进制文件时,特定 python 安装的site-packages
目录会自动添加到sys.path
。 当该二进制文件执行import modname
时,它会在 sys.path 上的目录中查找。 因此,当您使用特定的 python 二进制文件运行pip install
时,默认情况下,pip
将包放入该二进制文件的site-packages
中,以便二进制文件可以导入包。 高级使用可以做更复杂的事情。