4

大家好,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,然后从那里只导入我现在需要的不同文件?本质上,我想以一种更优雅、更清晰的方式做同样的事情。

提前致谢!

4

1 回答 1

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 上方的文件夹(在本例中为 base)作为您的工作目录,您需要像这样在文件夹 B 中调用 moduleA:

C:\path\to\base>python -m Academies.FolderB.moduleA
于 2013-11-07T22:46:52.087 回答