首页 > 解决方案 > 如何在单独的 setup.py 文件中进行所有导入,然后在 main.py 中导入此文件?

问题描述

我正在尝试制作一个安装脚本,它将在没有它的机器上安装所需的 python 模块。所以采用推荐的安装包方式,这是我的setup.py

import subprocess
import sys
import importlib

required_packages = ["cryptography.fernet", "os", "pip"]
for package in required_packages:
    try:
        importlib.import_module(package)
        print("Imported {} successfully".format(package))
    except ImportError:
        subprocess.check_call([sys.executable, "-m", "pip", "install", package])
        print("Installed {} successfully".format(package))

main.py作为:

import setup
os.walk(".")   # cause an error

这样我就可以控制哪些模块已安装,哪些未安装,然后安装它们。问题是导入setup.py in main.py似乎没有在全局命名空间中导入这些包,main.py所以我怎样才能让这两个 python 文件按预期工作。

标签: pythonpython-3.xmodulepip

解决方案


您的main.py文件应该像这样导入setup.py文件:

import setup
__import__('setup', globals={"__name__": __name__})

我会考虑将您的setup.py文件重命名install_packages.py为“设置”可能与先前分配的值冲突 - 例如:

import install_packages
__import__('install_packages', globals={"__name__": __name__})

推荐阅读