9

为了安装第三方 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 。

4

5 回答 5

14

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

>>> import mymodule
>>> print mymodule.__file__
'/path/to/mymodule.py'
于 2013-07-03T16:45:49.977 回答
2

几乎找到了解决这个问题的方法。我提到了这个问题这个问题,所以感谢那里给出的答案。

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

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

然后,您可以将模块从它们的名称作为字符串导入,如此处所述。然后正如 alejandro 已经说过mymodule.__file__的包含路径。

这是一种应该有效的解决方案。不是很优雅,但我只是一个 Python 初学者,比 Python 更擅长 google 搜索


我找到了一种更简单的方法来查找模块的位置。这可能是 OP 正在寻找的“优雅”解决方案。

import sys
print sys.path

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

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

于 2013-07-03T17:17:58.527 回答
0

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

于 2013-07-03T16:43:52.013 回答
0

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

% 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)"

输出:

% /home/toor/.pyenv/versions/3.7.9/bin/python3
于 2021-08-19T23:48:25.853 回答
0

我通过以下方式找到了我的安装路径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

注意:这在包setuptoolssys.path.

于 2017-03-28T17:24:54.123 回答