我的Python项目有问题。我的项目为每个配方解析不同的配方网站,并将配方数据写入文本文件。在
我的问题:我无法导入父目录中的python文件/模块。此文件包含分析网页的通用函数。执行此操作时出现错误:“ValueError:尝试在非包中进行相对导入”
我的解决方案:我不知道我的解决方案是什么?我想我要么需要找到一种从父目录导入文件的方法,要么改变我的项目架构,使每个域解析脚本都位于同一目录中
项目架构:
Test Folder:
__init__.py
UtilityFunctions.py # the file I am importing
PerformAllIndexing.py
all_recipes:
__init__.py
index.py # imports ../UtilityFunctions.py
simply_recipes:
__init__.py
index.py # imports ../UtilityFunctions.py
每个子目录都包含一个名为索引.py可以提取特定网站的配方名称、成分和说明,并将其写入文本文件。在
我建议您下载我的项目以详细了解我的问题:http://www.mediafire.com/?ynup22oe8ofam21
您能告诉我如何从父目录导入python模块,或者如何更改我的项目体系结构,使之不必重复代码(驻留在效用函数.py)?
我发现,相对的进口和项目布局可能是相当棘手的获得窍门!如果您遵循以下步骤,您应该让它正常工作:
from __future__ import relative_imports
。在为了简单起见,你需要这个布局
注意,^{中没有
__init__
。Project Root Folder
在您的PYTHONPATH
中。在现在,库中的相对导入应该可以正常工作,例如在
^{pr2}$all_recipes.index
中:绝对导入从
Test Folder
开始,例如但是,如果您只是尝试运行
all_recipes.index
,那么这个将不起作用。运行脚本时,它需要绝对导入。把它想象成你在写一个库和一个使用这个库的脚本。该库使用相对导入,但不能使用python -m
正常运行。您可以像这样运行脚本,但不能使用相对导入。所以你的剧本看起来像当您尝试运行单元测试时,这可能会导致问题,因为您并不总是希望运行整个套件。我对测试的建议是在
Project Root Folder
下的一个单独的tests
文件夹中保存,并且只使用绝对导入。使用测试运行程序(如nose)也有帮助。在只需将Test文件夹添加到python中系统路径所以你可以毫无问题地导入它。在
您的项目架构:
为了不乱弄}移到项目的根目录,并相应地命名它们。在
PYTHONPATH
或sys.path
,最好将all_recipes/index.py
和{因此,
UtilityFunctions
将很容易使用import UtilityFunctions
(顺便说一句,您应该将其命名为utility_functions
)。在{a1}另见}
p.S.改变
sys.path
有时会导致奇怪的行为。例如,一个模块可以导入两次。 此外,您还必须设置IDE以了解您对路径的修改。在相关问题 更多 >
编程相关推荐