Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:奇怪的导入行为_Python_Python Import_Python Packaging_Relative Import - Fatal编程技术网

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
    。项目目录名不必与包名匹配,但这也不会造成任何损害
  • 从python源文件中删除任何
    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会话中获取这些内容,因为它不使用该环境。