如何获取本地安装的Python模块列表?

发布于 2021-02-02 23:19:35

我想要获取Python模块的列表,这些模块在我的Python安装(UNIX服务器)中。

如何获得计算机中安装的Python模块的列表?

关注者
0
被浏览
67
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    pip freeze从Python脚本中获得类似列表的50美分:

    import pip
    installed_packages = pip.get_installed_distributions()
    installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
         for i in installed_packages])
    print(installed_packages_list)
    

    作为(太长)一行:

    sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
    

    给予:

    ['behave==1.2.4', 'enum34==1.0', 'flask==0.10.1', 'itsdangerous==0.24', 
     'jinja2==2.7.2', 'jsonschema==2.3.0', 'markupsafe==0.23', 'nose==1.3.3', 
     'parse-type==0.3.4', 'parse==1.6.4', 'prettytable==0.7.2', 'requests==2.3.0',
     'six==1.6.1', 'vioozer-metadata==0.1', 'vioozer-users-server==0.1', 
     'werkzeug==0.9.4']
    

    范围

    该解决方案适用于系统范围或到虚拟环境范围,和封面封装安装通过setuptools,pip以及(但愿)easy_install

    我的用例

    我将此调用的结果添加到了我的Flask服务器中,因此,当我用它调用它时,http://example.com/exampleServer/environment我会获得服务器的virtualenv上安装的软件包的列表。它使调试变得非常容易。

    注意事项

    我注意到这种技术的奇怪行为-当Python解释器在与setup.py文件相同的目录中被调用时,它不会列出所安装的软件包setup.py

    重现步骤:

    创建一个虚拟环境

    $ cd /tmp
    $ virtualenv test_env
    New python executable in test_env/bin/python
    Installing setuptools, pip...done.
    $ source test_env/bin/activate
    (test_env) $ 
    克隆git repo setup.py
    (test_env) $ git clone https://github.com/behave/behave.git
    Cloning into 'behave'...
    remote: Reusing existing pack: 4350, done.
    remote: Total 4350 (delta 0), reused 0 (delta 0)
    Receiving objects: 100% (4350/4350), 1.85 MiB | 418.00 KiB/s, done.
    Resolving deltas: 100% (2388/2388), done.
    Checking connectivity... done.
    

    我们的行为的setup.py/tmp/behave

    (test_env) $ ls /tmp/behave/setup.py
    /tmp/behave/setup.py
    

    git repo安装python包

    (test_env) $ cd /tmp/behave && pip install . 
    running install
    ...
    Installed /private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.egg
    Finished processing dependencies for behave==1.2.5a1
    

    如果我们从 /tmp

    >>> import pip
    >>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
    ['behave==1.2.5a1', 'enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
    >>> import os
    >>> os.getcwd()
    '/private/tmp'
    

    如果我们从 /tmp/behave

    >>> import pip
    >>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
    ['enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
    >>> import os
    >>> os.getcwd()
    '/private/tmp/behave'
    

    behave==1.2.5a1第二个示例中缺少,因为工作目录包含behave的setup.py文件。

    我在文档中找不到对此问题的任何引用。也许我会为此打开一个错误。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看