繁体   English   中英

Python库的安装路径如何找到?

[英]How to find out the Python library installation path?

为了安装第三方 Python 包,我使用了一个 setup.py 脚本,该脚本使用 setuptools.setup() 安装一堆包。 安装后,我可以在一台机器上的 /usr/local/lib/python2.7/dist-packages 下和另一台机器上的 /usr/lib/python2.7/site-packages 下找到这些包。

现在我想写一个 Python 脚本,找出第三方包的安装位置。 我怎样才能做到这一点?

1) sys.prefix=sys.exec_prefix 在两台机器上都是“/usr”。

2) python 可执行文件在两台机器/usr/bin/python 上。

3) distutils.sysconfig.get_python_lib() 在一台机器上是 /usr/lib/python2.7/dist-packages(缺少“本地”),在另一台机器上是 /usr/lib/python2.7/site-packages。

如果已经安装了软件包,您可以只导入它们,并查看它们的__file__属性:

>>> import mymodule
>>> print mymodule.__file__
'/path/to/mymodule.py'

几乎找到了解决这个问题的方法。 我对这个问题这个问题进行了评论 ,感谢那里给出的答案。

首先,您需要将所有已安装模块的列表放入列表中。 使用此问题可以捕获此问题解决方案的输出。

现在您有一个已安装的所有python模块的列表。 您需要查看列表的格式,然后正确格式化以将各个元素作为模块的名称。

然后,你可以从他们的名字导入模块的字符串作为解释在这里 然后,因为alejandro已经说mymodule.__file__包含路径。

这是一个应该有效的解决方案。 不是很优雅,但我只是一个Python初学者,他在谷歌搜索方面比Python更好


我找到了一种更容易找到模块的方法。 这可能是OP正在寻找的“优雅”解决方案。

 import sys print sys.path 

来自Python文档的sys模块 sys.path包含

一个字符串列表,指定模块的搜索路径。 从环境变量PYTHONPATH初始化,加上依赖于安装的默认值。

执行此操作的快速命令行方式如下:

% python3 -c "import sys; print(list(filter(lambda s: s.find('packages') > -1, sys.path)))"

这将列出 python3 的所有包文件夹。 例如:

['/home/toor/.local/lib/python3.7/site-packages', '/home/toor/.pyenv/versions/3.7.9/lib/python3.7/site-packages']

如果查找或可执行路径:

% python3 -c "import sys; print(sys.executable)"

Output:

% /home/toor/.pyenv/versions/3.7.9/bin/python3

我不知道在Python中执行此操作的好方法(除了从给定的根目录爬取目录以使用os.walk查找文件)。 如果你没有在Python中得到任何更好的答案,你可以在你的操作系统上从python执行命令,在你正在寻找的库上执行标准的Linux / Unix查找命令。 您可以使用子进程模块执行此操作。

我通过sys.path找到了我的安装路径:

my_name = "mypackage"
def _post_install():
     def find_module_path():
         for p in sys.path:
             if os.path.isdir(p):
                 for f in os.listdir(p):
                     if f == my_name:
                         return os.path.join(p, f)
     install_path = find_module_path()
     # do something we the install_path

注意:这在setuptools注册包之后setuptools ,如果包已经安装在sys.path中的多个目录中,您可能还需要处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM