从所有 .py 文件生成模块列表并在不指定模块版本的情况下安装

Generating list of modules from all .py files and installing without specifying module version

我有数百个 python 文件,我需要安装所有现有模块,我想我会创建一个文件,其中包含文件中导入的所有模块名称:

import os

def remove_duplicates():
    lines = open('all_modules.txt', 'r').readlines()
    lines_set = set(lines)
    out  = open('all_modules.txt', 'w')
    for line in lines_set:
        out.write(line)

def main():
    fileDir = r"C:\Users\Computador\Desktop\tests vscode"
    fileExt = r".py"
    py_file_list = [_ for _ in os.listdir(fileDir) if _.endswith(fileExt)]

    with open('all_modules.txt', 'w+', newline='', encoding='UTF-8') as f:

        for py_file in py_file_list:
            with open(py_file) as stacktest:
                stacktest_list = [line.strip() for line in stacktest.readlines()]

            for line in stacktest_list:
                if 'import ' in line and "'" not in line:
                    after_import = line.split('import ',1)[1]
                    before_space = after_import.split(' ')[0]
                    before_comma = before_space.split(',')[0]
                    f.write(before_comma + '\n')

    remove_duplicates()

if __name__ == '__main__':
    main()

all_modules.txt 中的示例结果:

pandas
time
dataframe_image
webbrowser
num2words
glob
Pool
schedule
move
csv
os
feedparser

但是要使用 pip install using requirements.txt 安装,必须有我要安装的模块的版本,在这种情况下,计算机是完全干净的,我想要所有模块的最新版本.

有没有办法一次性安装这些模块,而不用手动一个一个写?

But to install with pip install using requirements.txt it is necessary to have the version of the module I want to install

事实并非如此。您可以将生成的文件和 运行 pip install -r all_modules.txt

Pip 将遍历文件中的每个名称并尝试安装可用的最新版本(这可能与您最初编写代码时使用的版本不同 - 可能无法正常工作,但它至少会安装包)。

您可能会遇到的其他问题是:

  1. 你的文件中的名称是从import语句中提取的,但是包的导入名称不一定与你需要pip install的PyPI中的包名称匹配
  2. 你会发现一些不需要pip安装的导入包,比如来自Python stdlib的包,或者来自你自己项目中其他模块的包...这些在你尝试时会报错pip install 它们——或者更糟的是,你可能会巧合地安装 PyPI 中存在的同名的不同包