Python:奇怪的导入行为
我有一个具有以下结构的包Python:奇怪的导入行为,python,python-import,python-packaging,relative-import,Python,Python Import,Python Packaging,Relative Import,我有一个具有以下结构的包 projectX ├── data ├── results └── projectX ├── stats │ ├── __init__.py │ ├── stats_worker.py │ └── stats_wroker2.py ├── __init__.py ├── main_worker.py └── interface.py 请注意,项目文件夹和源文件夹共享相同的名称(projectX) 这
projectX
├── data
├── results
└── projectX
├── stats
│ ├── __init__.py
│ ├── stats_worker.py
│ └── stats_wroker2.py
├── __init__.py
├── main_worker.py
└── interface.py
请注意,项目文件夹和源文件夹共享相同的名称(projectX)
这个问题有点复杂,需要做一些前提
房产:
我总是启动界面,而且总是启动界面。不调用其他脚本
我的问题首先出现在尝试从stats_worker2导入主工作时
我不能让它作为一个相对的进口。所以我试着
从stats_worker2和接口(分别)将父目录追加到sys.path。我尝试了各种我不记得的方法
通过向stats_worker2添加以下行,它最终起到了作用
sys.path.append('../projectX')
from projectX import main_worker
现在奇怪开始了
在多次调用脚本(我不记得确切调用了多少次)后,上面的sintax不再工作。因为有一个:
ImportError:没有名为projectX的模块
编辑:以上斜体部分是由于我在projectX源文件夹中缺少了一个\uuu init\uuuuuuuuuuuuuuupy
。所有其他症状仍然存在
但是,奇怪的是,我现在可以从stats_worker2成功导入主工作程序,方法是:
import main_worker
而不将任何目录附加到sys.path
然而,斯芬克斯不再工作了具体来说,它无法导入projectX包的所有模块
奖金怪诞
我曾经成功地从接口导入stats_worker,现在我仍然可以导入它,但是我的IDE(Pycharm)将导入标记为未使用。它实际上已经被使用,如果我对导入进行注释,接口就会像预期的那样崩溃(我已经使Pycharm缓存失效)
\uuuuu init\uuuuu.py
文件添加到源根目录†李>
sys.path
中可见。项目根目录不应具有\uuuu init\uuuu.py
。项目目录名不必与包名匹配,但这也不会造成任何损害李>
sys.path.append
内容,以后不要再这样做李>
from projectX import main\u worker
是stats\u worker2.py
模块的正确导入语句。不要使用导入主\u worker
李>
对于步骤2,通常的方法是使用python setup.py develope
“安装”包。i、 e.您需要编写一个setup.py
。由于您显然没有setup.py
,作为一种廉价的解决方法,您可以导出PYTHONPATH=
†源根目录是较深的projectX
dir目录,它与包含main\u worker.py
模块的目录相同
††项目根目录是浅
projectX
dir,它是同一个目录,包含数据
和结果
子目录。您是否缺少projectX中的\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuupy
?是的,很抱歉,我在某个测试时删除了它,忘了重新添加。现在我已经恢复了这个问题(扰流板:实际上是一样的),我将\uuu init\uuuu.py
文件添加到源projectX中,我将相应地编辑这个问题。现在导入工作正常。但是,在尝试导出PYTHONPATH=之后,问题仍然存在。Sphinx找不到projectX
包的任何模块,my IDE仍将stats\u worker
标记为未使用的导入。您还需要在IDE中导出环境变量。它不会从bash会话中获取这些内容,因为它不使用该环境。