有没有办法在我自己的python项目中自动检测所需的模块和包

Kim*_*mmi 7 python pip requirements.txt

我想创建一个python分发包,并且需要检查我自己的包所需的所有包。

对于requirements.txt,它包括它需要的所有包。但是,我想找到一种方法来检查我需要的所有包,并且对于某些包,它们也是我项目中其他包的一些要求。

有什么方法可以检查我需要哪些包,并为我自己的项目维护最少的包?

Dan*_*aun 9

pip freeze将打印您当前环境中碰巧安装的任何软件包。要列出实际导入的包,请使用pipreqs

pip install pipreqs
pipreqs path_to_project
Run Code Online (Sandbox Code Playgroud)


ale*_*cxe 7

通常人们通过安装所需模块的单独虚拟环境来了解他们的需求。requirements.txt在这种情况下,通过在虚拟环境中运行以下命令来创建文件很简单:

pip freeze > requirements.txt
Run Code Online (Sandbox Code Playgroud)

此外,为了避免生产中出现意外并对您拥有的代码充满信心,最好进行测试和良好的测试覆盖率。如果存在导入但未安装的模块,测试会显示出来。


查找无法导入的模块的另一种方法是pylint对包使用静态代码分析工具。有一个特别F0401 - Unable to import %s警告。

演示:

  • 假设您有一个test.py只有一条import语句的文件

    import pandas
    
    Run Code Online (Sandbox Code Playgroud)
  • pandas当前python环境中未安装模块

  • 这是输出pylint test.py

    $ pylint test.py
    No config file found, using default configuration
    ************* Module test
    C:  1, 0: Missing module docstring (missing-docstring)
    F:  1, 0: Unable to import 'pandas' (import-error)
    W:  1, 0: Unused import pandas (unused-import)
    
    Run Code Online (Sandbox Code Playgroud)