【问题标题】:Find modules required by a python script [closed]查找python脚本所需的模块[关闭]
【发布时间】:2023-03-12 17:45:01
【问题描述】:

有一些目录包含文件和文件夹,其中包含一些编程模块,如 Perl 模块、python 文件和一些其他 shell 文件。 python(.py) 中有一个主文件来完成一些需要一些模块而不是全部的任务。

考虑一个场景,主要 python 文件导入一些其他 python 文件,并且在代码中它使用 os.system('perl perl_filename.pm') 并且这个 perl_filename 它自己调用其他 perl 模块和 python 文件。

如何在执行结束时找到这个主要python文件使用的所有文件和模块。一种解决方案是从头开始读取代码并通过读取代码找到依赖关系。但是代码库太大了这是不可行的。

【问题讨论】:

  • 如果你只想使用 shell 命令,为什么要标记 Perl? Python 进程可能不会打开任何 Perl 文件。
  • python 文件可以有这些命令,如 os.system("perl filename")

标签: python linux bash perl scripting


【解决方案1】:

这个问题太笼统了。我认为你应该看看snakefood,这将帮助你找出依赖关系。

sfood -fuq main_file.py | sfood-target-files 

【讨论】:

  • 我只想使用 shell 命令来解决这个问题
  • 您在纯 shell 中编写自己的替换 sfood。可能您也需要重新实现 Python。
  • 阅读代码库似乎比实现 sfood 更可行。让我们先离开sfood,我可以使用调试模块顺序检查正在调用的文件吗?
【解决方案2】:

我的第一个猜测,简单,但肯定不是最好的方法,是使用lsof 来显示该脚本打开了哪些文件。示例:

$ sudo lsof | grep 31454 | grep python
carbon-ca 31454      carbon  txt       REG                9,2       4864     660953 /usr/bin/python
carbon-ca 31454      carbon  mem       REG                9,2      11608     785876 /usr/lib64/python2.6/lib-dynload/resource.so
carbon-ca 31454      carbon  mem       REG                9,2      24432     785877 /usr/lib64/python2.6/lib-dynload/selectmodule.so
carbon-ca 31454      carbon  mem       REG                9,2      22240     785814 /usr/lib64/python2.6/lib-dynload/_heapq.so
carbon-ca 31454      carbon  mem       REG                9,2       9872     785794 /usr/lib64/python2.6/lib-dynload/_bisectmodule.so
carbon-ca 31454      carbon  mem       REG                9,2      67296     656787 /usr/lib64/python2.6/site-packages/OpenSSL/SSL.so
carbon-ca 31454      carbon  mem       REG                9,2      12848     670980 /usr/lib64/python2.6/site-packages/OpenSSL/rand.so
carbon-ca 31454      carbon  mem       REG                9,2      94496     662596 /usr/lib64/python2.6/site-packages/OpenSSL/crypto.so
carbon-ca 31454      carbon  mem       REG                9,2      21376     673621 /usr/lib64/python2.6/site-packages/twisted/python/_epoll.so
carbon-ca 31454      carbon  mem       REG                9,2      14632     785853 /usr/lib64/python2.6/lib-dynload/fcntlmodule.so
carbon-ca 31454      carbon  mem       REG                9,2      21608     785817 /usr/lib64/python2.6/lib-dynload/_localemodule.so
carbon-ca 31454      carbon  mem       REG                9,2       7744     787783 /usr/lib64/python2.6/lib-dynload/syslog.so
carbon-ca 31454      carbon  mem       REG                9,2      23784     785886 /usr/lib64/python2.6/lib-dynload/zlibmodule.so
carbon-ca 31454      carbon  mem       REG                9,2     123608     785806 /usr/lib64/python2.6/lib-dynload/_ctypes.so
carbon-ca 31454      carbon  mem       REG                9,2      12680     785823 /usr/lib64/python2.6/lib-dynload/_randommodule.so
carbon-ca 31454      carbon  mem       REG                9,2      

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2013-05-15
    • 2017-10-23
    • 2017-12-01
    相关资源
    最近更新 更多