【发布时间】:2018-03-23 02:48:50
【问题描述】:
假设我有一个任意大的模块化 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
↳ test
-
project是根文件夹——它是一个 PyCharm 项目,它不是一个模块。 -
project\package是项目的根 Python 模块。它包含许多子目录,每个子目录都是一个名为moduleN的Python 模块。 - 每个
project\package\moduleN模块都包含许多子目录,每个子目录都是一个名为submoduleN的Python 模块……以此类推。
假设我想要运行一个名为 foo.py 的特定 Python 脚本,它位于 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()hacks 的一些迭代。这些建议都不适用于我的情况。 - 我使用
export PYTHONPATH=absolute/path/to/project/package设置了一个.bashrc文件,其中package是我在PyCharm 中的源根目录,但仍然抛出导入错误。相对路径也不起作用。我已经用echo $PYTHONPATH验证了路径是正确的。export PYTHONPATH=absolute/path/to/project同样不起作用。 - 工作目录似乎无关紧要 - 无论工作目录如何,Git Bash 每次都会失败,而无论工作目录如何,PyCharm 每次都能正常工作。
编辑 2:
该问题仍未解决,但可能与在 Git Bash 上未正确设置 PYTHONPATH 有关。当Add Content Roots to PYTHONPATH未勾选时,PyCharm 会抛出与 Git Bash 相同的导入错误。
【问题讨论】:
-
如果你在 PyCharm 中设置了 'sources root' 变量,这将更新你的 pythonpath 变量。这不会在 gitbash 中自动设置 - 你可以右键单击项目结构中的文件夹并选择'将目录标记为>'以查看它是否被标记为'sources root'。在项目结构中查找设置为蓝色的文件夹图标,然后在程序的入口脚本中,使用
os.path.append('dir')在 python 路径上设置此目录 -
project已在 PyCharm 中设置为源根。 PyCharm 有效,我的大问题是 Git Bash。如何在 Git Bash 中“在 python 路径上设置这个目录”? -
你有很多设置 python 路径的选项。您可以使用 python 路径更新 .bashrc,您可以更新您的 python 脚本以通过 os.path.append('
/ / ') 设置 python 路径,您可以使用 bash 包装器Python 模块在执行 Python 模块之前导出 PYTHONPATH 的脚本 -
查看this 的答案,了解这个问题的“干净”解决方案
-
@AK47 我使用
export PYTHONPATH=path/to/project/package创建了一个.bashrc配置文件,其中package是我在PyCharm 中的根,但我仍然收到导入错误。
标签: python python-2.7 pycharm git-bash