你好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
文件导入其中的所有不同软件包,并且所有其他脚本只需调用import paths
然后从那里导入我需要的不同文件像我现在一样?
从本质上讲,我想以更优雅和清晰的方式做同样的事情。
提前致谢!
答案 0 :(得分:1)
因为这些文件夹中的所有模块似乎都相互依赖,所以我建议将这整个文件夹组成一个巨大的包,如下所示:
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:\path\to\base>python -m Academies.FolderB.moduleA