Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检索Python单个脚本的需求_Python_Python 3.x_Pip - Fatal编程技术网

检索Python单个脚本的需求

检索Python单个脚本的需求,python,python-3.x,pip,Python,Python 3.x,Pip,我想知道如何从单个python脚本中提取需求。导入后,我在文件开头立即尝试了以下方法: try: from pip._internal.operations import freeze except ImportError: # pip < 10.0 from pip.operations import freeze x = freeze.freeze() for p in x: print(p) 试试看: 来自pip.\u内部操作导入冻结 除此之外:#pip

我想知道如何从单个python脚本中提取需求。导入后,我在文件开头立即尝试了以下方法:

try:
    from pip._internal.operations import freeze
except ImportError:  # pip < 10.0
    from pip.operations import freeze

x = freeze.freeze()
for p in x:
    print(p)
试试看:
来自pip.\u内部操作导入冻结
除此之外:#pip<10.0
从pip.operations导入冻结
x=冻结。冻结()
对于x中的p:
印刷品(p)
然而,上面的代码将返回本地安装的所有Python框架。我只想提取脚本的必要需求,以便能够部署最终的应用程序
我希望我说得很清楚。

使用“modulefinder”python模块可以轻松做到这一点。

我认为您需要打印脚本所需的所有模块。 所以,你可以参考

为方便起见,代码如下:




pipreqs使用简单

安装:

pip安装pipreqs

在linux中,位于脚本的同一文件夹中 使用:

pipreqs.

然后创建requirements.txt文件

pip主页:


皮普没有办法知道这一点。了解模块需求的唯一方法是有人记录它们。此外,这听起来有点像XY问题。您试图解决的实际问题是什么?创建一个虚拟环境,只安装脚本的必要要求,然后pip freeze将只提供您需要的。@grooveplex简而言之,我想提取python文件的要求,但不是本地安装的所有库!!上面提到的这段代码还给了我…开发人员负责安装的软件包和一个干净的
requirements.txt
。在工作中,我们手工维护
requirements.txt
中的包,因为
pip freeze
会将所有依赖项和子依赖项添加到列表中,这有时会让人困惑。尽管如此,您仍然可以使用stdlib库来检查加载的模块。我希望,我帮助了您。非常好的解决方案!如果还有检索版本控制的方法,我们还可以生成
requirements.txt
文件。但我必须做的是,知道这些框架的名称是非常详尽的!;)非常感谢你!我很高兴能帮助您。我是否错误地认为这只会给您导入的模块,而不会给您需要安装pip的项目?不,它包括python脚本使用的所有类型的模块。我没有尝试过,但似乎是一个比目前接受的解决方案更好的解决方案。
from modulefinder import ModuleFinder
f = ModuleFinder()
# Run the main script
f.run_script('run.py')
# Get names of all the imported modules
names = list(f.modules.keys())
# Get a sorted list of the root modules imported
basemods = sorted(set([name.split('.')[0] for name in names]))
# Print it nicely
print ("\n".join(basemods))