如何在python3中列出脚本使用的所有python包
如何在python3中列出脚本使用的所有python包
有一些我已经阅读过的类似问题,但它们似乎都只针对Python 2.x的方法,而我正在使用Python 3.x。
我有一个Python文件,称之为test.py,它有许多包导入(例如import numpy as np),但它还导入了其他一些文件,我们称之为subTest1.py和subTest2.py。每个subTest文件都有它们自己的导入(可能是其他文件和包)。有没有一种自动获取运行主脚本(test.py)所需的所有包的方法?
我知道pip freeze可以显示我安装的所有包,但这不是我想要的 - 可能安装了一个不需要运行test.py脚本的包。
类似的问题,但针对Python 2.x:
Return a list of imported Python modules used in a script?
Get all modules/packages used by a python project
似乎是特定于Python 2.x的包:
snakefood
pipreqs
pipreqs失败的原因:
跟踪(最近的调用最先):
文件“c:\ anaconda36 \ envs \ tensorflow \ lib \ runpy.py”,第193行,_run_module_as_main
“__main__”,mod_spec)
文件“c:\ anaconda36 \ envs \ tensorflow \ lib \ runpy.py”,第85行,_run_code
执行(代码,run_globals)
文件“C:\ Anaconda36 \ envs \ tensorflow \ Scripts \ pipreqs.exe \ __main__.py”,第9行,在
文件“c:\ anaconda36 \ envs \ tensorflow \ lib \ site-packages \ pipreqs \ pipreqs.py”,第396行,主要
init(args)
文件“c:\ anaconda36 \ envs \ tensorflow \ lib \ site-packages \ pipreqs \ pipreqs.py”,第341行,init
extra_ignore_dirs = extra_ignore_dirs)
文件“c:\ anaconda36 \ envs \ tensorflow \ lib \ site-packages \ pipreqs \ pipreqs.py”,第91行,get_all_imports
raise exc
文件“c:\ anaconda36 \ envs \ tensorflow \ lib \ site-packages \ pipreqs \ pipreqs.py”,第77行,get_all_imports
tree = ast.parse(contents)
文件“c:\ anaconda36 \ envs \ tensorflow \ lib \ ast.py”,第35行,parse
返回编译(源,文件名,模式,PyCF_ONLY_AST)
文件“
print vsize
^
语法错误:调用'print'时缺少括号
问题的出现原因:
用户想要找到一个方法来列出Python脚本中使用的所有Python包,以便能够查看脚本所依赖的包。然而,用户发现在Python3中,常用的方法`pip freeze`只会列出当前环境中安装的包,而不是脚本所使用的包。
解决方法:
用户可以按照以下步骤来解决这个问题:
- 安装gunicorn包:
pip3 install gunicorn
- 在项目目录中,输入以下命令:
pip3 freeze > requirements.txt
这个`requirements.txt`文件将会列出项目目录中使用的所有包。
这样,用户就可以通过查看`requirements.txt`文件来获取脚本所使用的所有Python包。
问题的出现原因:
该问题的提出者在谷歌上找到了一个脚本,该脚本可以列出Python脚本中使用的所有包。然而,该脚本是针对Python 2版本编写的,而提问者想要在Python 3下使用。因此,他对脚本进行了更新,即将print函数改为适用于Python 3的形式,以确保脚本在Python 3下能够正常运行。
解决方法:
提问者提供了一个解决方法,即使用modulefinder模块来列出Python脚本中使用的所有包。他在脚本中导入了ModuleFinder类,并使用它来运行指定的Python脚本。然后,他通过将导入的模块名称按照根模块进行排序,将它们以漂亮的格式打印出来。
具体的解决方法如下所示:
from modulefinder import ModuleFinder # 创建ModuleFinder对象 f = ModuleFinder() # 运行指定的Python脚本 f.run_script('test.py') # 获取所有已导入模块的名称 names = list(f.modules.keys()) # 获取已导入根模块的排序列表 basemods = sorted(set([name.split('.')[0] for name in names])) # 以漂亮的格式打印出来 print("\n".join(basemods))
要使用这个解决方法,只需将`test.py`替换为您想要检查的任何文件名,然后从终端运行该脚本:
python module_finder_script.py
如果这个解决方法对您有帮助,请告诉我。
问题的原因是用户想要找到一个方法来列出Python脚本中使用的所有包,以便于管理和共享依赖关系。解决方法是使用pipreqs包来生成一个包含脚本所需所有依赖项的requirements.txt文件。
以下是解决问题的步骤:
1. 首先,用户需要安装pipreqs包。可以使用以下命令在Python3中安装pipreqs包:
pip3 install pipreqs
2. 安装完成后,用户可以使用以下命令来生成requirements.txt文件:
pipreqs ./your_script_directory
这将在脚本目录中生成一个名为requirements.txt的文件,其中包含所有的依赖项。
3. 如果用户遇到pipreqs运行失败的问题,可能是由于使用的Python版本不兼容导致的。用户可以尝试使用pip3命令来安装pipreqs包,以确保使用的是Python3版本的pip。可以使用以下命令卸载和重新安装pipreqs包:
pip uninstall pipreqs pip3 install pipreqs
4. 如果问题仍然存在,用户可以尝试创建一个新的conda环境,并在该环境中运行脚本。可以使用以下命令创建一个名为myenv的新conda环境,并指定Python版本为3.8:
conda create -n myenv python=3.8
然后,用户可以在新的conda环境中运行上述命令。
要列出Python脚本中使用的所有包,用户可以使用pipreqs包来生成requirements.txt文件。如果遇到运行失败的问题,用户可以尝试使用pip3来安装和运行pipreqs,并在必要时创建新的conda环境来解决问题。