加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

使用Python导入复杂模块

发布时间:2020-12-20 13:38:15 所属栏目:Python 来源:网络整理
导读:你好 pythonistas, 我有一个扩展的文件夹和python脚本子文件夹的层次结构. 从任何脚本,我需要能够在任何其他文件夹中导入任何其他python脚本. 我创建了文件夹作为包,因为这是在许多网站上导入的推荐方式. 我实施的第一个“游击队”方式,它的工作原理如下: 1
你好 pythonistas,

我有一个扩展的文件夹和python脚本子文件夹的层次结构.
从任何脚本,我需要能够在任何其他文件夹中导入任何其他python脚本.
我创建了文件夹作为包,因为这是在许多网站上导入的推荐方式.

我实施的第一个“游击队”方式,它的工作原理如下:
1.我创建了一个paths.py文件,我将每个新文件夹附加到sys.path.

import sys
import platform

if platform.system() == 'Linux':
    python_path = '/var/lib/jenkins/jobs/QA/workspace/Site'
else:
    python_path = 'C:/Python27/projects/QA/Site'

#ACADEMIES
sys.path.insert(1,python_path + '/Academies/Tests')
sys.path.insert(2,python_path + '/Academies/Suites')
sys.path.insert(3,python_path + '/Academies/inc')
sys.path.insert(35,python_path + '/Academies/Academy_wall')

2.在我执行导入的每个文件中,如下所示:

正如你所看到的,PyCharm抱怨进口;但是当我运行它时,它的工作原理.

有没有可能有一个paths.py文件导入那里的所有不同的包,所有其他脚本只能调用导入路径,然后从那里只导入我需要的不同文件,就像我现在做的那样?
从本质上讲,我想以更优雅和清晰的方式做同样的事情.

提前致谢!

解决方法

好吧,因为这些文件夹中的所有模块似乎都相互依赖,所以我建议将这整个文件夹组成一个巨大的包,如下所示:

base
 |
 +--Academies
     |
     +- __init__.py
     +- FolderA
     |  +- __init__.py
     |  +- moduleA.py
     |  +- moduleB.py
     +- FolderB
     |  +- __init__.py
     |  +- moduleA.py
     |  +- moduleB.py

在每个模块中,请参考其他模块,如下所示:

# File: Academies/FolderA/moduleA.py
from Academies.FolderB import moduleA,moduleB
from . import moduleB as local_b  # moduleB is a naming conflict in this example so we rename it to local_b for the scope of this file.

使用此方案,您仍然可以相对轻松地从任何其他模块引用模块.

如果您需要将模块作为__main__运行,则必须修改调用它们的方式.

使用Academies(在此示例中为基础)上面的文件夹作为工作目录,您将要像在这样调用folderB中的moduleA:

C:pathtobase>python -m Academies.FolderB.moduleA

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读