假设我有一个任意大的模块化Python 2.7代码库:project
↳ docs
↳ etc
↳ package
↳ module1
↳ submodule1
↳ subsubmodule1
↳ __init__.py
↳ subsubmodule2 (... and so on)
↳ __init__.py
↳ submodule2
↳ subsubmodule1
↳ __init__.py
↳ subsubmodule2 (... and so on)
↳ __init__.py
↳ submodule3 (... and so on)
↳ __init__.py
↳ module2
↳ submodule1
↳ __init__.py
↳ submodule2 (... and so on)
↳ __init__.py
↳ __init__.py
↳ module3 (... and so on)
↳ __init__.py
↳ __init__.py
↳ testproject 是根文件夹 - 它是一个PyCharm项目,它不是一个模块。
project\package是项目的根Python模块。它包含许多子目录,每个子目录都是一个名为的Python模块moduleN。
每个project\package\moduleN模块都包含许多子目录,每个子目录都是一个名为submoduleN... 的Python模块,依此类推。
假设我有一个特定的Python脚本foo.py,我希望运行它,并且它位于以下无限多个子模块中的一个子模块中package:# foo.py:
from package.module2.submodule3 import foo
print foo.bar()
当从PyCharm运行脚本时Ctrl+F9:没问题,foo.bar()打印。
但是当脚本从Git Bash终端运行时,从主目录运行:python path/to/project/package/module4/submodule6/subsubmobile5/foo.py
抛出以下错误:ImportError:没有名为package.module2.submodule3的模块
我想知道我需要做什么才能让我的脚本在Git Bash上运行,以及为什么PyCharm和Git Bash之间首先出现差异。这与它有关PYTHONPATH吗?
编辑:许多 StackOverflow答案建议使用一些sys.path.append()黑客的迭代。在我的案例中,这些建议都不起作用。
我设置了一个.bashrc文件export PYTHONPATH=absolute/path/to/project/package,package在PyCharm中我的源根目录在哪里,但仍然会抛出导入错误。相对路径也不起作用。我已经验证了路径是正确的echo $PYTHONPATH。export PYTHONPATH=absolute/path/to/project同样不起作用。
工作目录似乎并不重要 - 无论工作目录如何,Git Bash每次都失败,并且PyCharm每次都工作,无论工作目录如何。
编辑2:
这个问题仍未得到解决,但可能与PYTHONPATHGit Bash上未正确设置有关。如果Add Content Roots to PYTHONPATH是取消选中,PyCharm抛出同样的导入错误的混帐击。