我面临着奇怪的问题,虽然是python的新手。这看起来与几个论坛上已经说过的有点不同。
Directory structure:
Project_Folder
-- Folder A
-- SubFolder A1
-- Subfolder A2
-- Subfolder A3
-- Folder A3-1
-- XYZ.py
-- Subfolder A4 ( this contains utility classes)
-- A4-1.py
-- A4-2.py
注意:所有文件夹都包含__init__.py
,PYTHON PATH也包含PATH中所有必需的目录。
脚本XYZ.py ...取决于以下2个实用程序类。 Scipts首先在sys.path附加子文件夹A4,因此理想情况下不需要使用A4.A4-1.py而是直接A4-1应该在导入时使用。如下 来自A4-1.py导入子方法 来自A4-2.py导入子方法
但这是一个问题......如主题所述。但是,如果我使用A4.A4-1.py
,同样有效奇怪的是,在已经设置了项目的服务器上是相同的脚本工作。
对Python不熟悉,我需要了解如何从本地机器执行此脚本。 (在导入时不更改或使用模块名称)
另外,我正在使用IDE INtelliJ,我已将A4作为依赖项添加到我的项目中。编译器能够解决它,但执行会导致导入错误...
感谢任何帮助。
答案 0 :(得分:2)
现在已经解决了,问题是PYTHONPATH上类似文件夹的冲突,有一条路径存在实用程序但没有文件存在...删除路径本身后,它在正确的路径上搜索了util文件...
答案 1 :(得分:1)
文件是否真的命名为A4-1.py
等?因为这给了我一个SyntaxError而不是一个ImportError;模块名称中显然不允许-
符号。这是有道理的,因为它意味着减去。
如果你在同一个项目中导入,我个人会说在大多数情况下,像这样导入
from A4.A4_1 import submethods
比向您的路径添加A4然后直接从A4_1
导入更好。
修改强>
如果你解决了..
?
import sys,os,time,datetime
testdir = os.path.dirname(os.path.abspath(__file__))
newdir = os.path.abspath(os.path.join(testdir, '../../utilities'))
sys.path.append(newdir)
如果没有,您可以使用
验证是否包含正确的绝对路径print sys.path
<强> EDIT2 强>
如果您正在检查sys.path
,请确保不存在与导入开头匹配的其他目录,但不包含其余目录(例如submethods
)。如果有另一个目录A4
,那么Python可能使用了错误的目录。
还要确保该名称不是现有的Python模块。 (例如,如果重命名模块,导入的第一部分仍然有效。)