python中的相对模块路径-如何配置路径(和PyCharm)

时间:2019-08-07 06:11:54

标签: python module path pycharm

我正在使用PyCharm(在Windows计算机上)处理python 3.7脚本。该脚本由一位同事编写,已经在多台计算机上运行。我不想对文件结构或脚本进行任何更改(除了我将在以后进行的算法更改之外),因此可以将其合并回原始存储库。
但是,相对路径存在问题。我希望可以通过更改计算机上的配置来解决该问题。

我将同事的github存储库分叉到C:\Users...\project中 我正在处理的脚本是C:\Users...\project\...\model\script.py

script.py一样,目录(源目录)C:\Users...\project\...\model包含许多模块(module1.pymodule2.py等),其中包括类,例如。 Classscript.py导入。

C:\Users...\project\...\model包含一个空的__init__.py文件,在PyCharm中,C:\Users...\project\...\model被标记为library root

python解释器位于C:\Users...\Local\Continuum\anaconda3\python.exe,(我认为这使C:\Users...\Local\Continuum\anaconda3成为根目录?)源目录不是根目录的子路径。

script.py包含行from ..model.module1 import Class1,这会引起问题,但是我不想更改该行,因为我认为问题出在我的配置上,而不是脚本。 >

我的理解是,当我从PyCharm内部运行script时,默认情况下,C:\Users...\project\...\model被添加到PYTHONPATH且工作目录被设置为C:\Users...\project\...\model

此过程失败,并显示以下消息:

from ..model.module1 import Class1
ValueError: attempted relative import beyond top-level package

大概是因为..指向工作目录上方的文件夹吗?但是,如果将工作目录更改为更高级别,例如C:\Users...\project,则会收到相同的消息。

我也尝试过从命令行运行它:

cd C:\Users...\Local\Continuum\anaconda3
python C:\Users...\project\...\model\script.py

生成相同的消息。

一位同事建议使用-m开关,但

cd C:\Users...\Local\Continuum\anaconda3
python -m script.py

给出了不同的消息:

from ..model.module1 import Class1
ImportError: attempted relative import with no known parent package

因此,我不确定如何继续执行该脚本以在PyCharm中运行还是从命令行运行。请帮忙!

1 个答案:

答案 0 :(得分:1)

您需要在model以上至少有一个以上的软件包级别才能运行此脚本。具有以下文件结构:

.
└── parent_pkg
    ├── __init__.py
    └── model
        ├── __init__.py
        ├── module1.py
        └── script.py

这些文件的内容:

module1.py

class Class1:
    pass

script.py

from ..model.module1 import Class1


if __name__ == '__main__':
    c = Class1()
    print('Hi there')

以下命令允许您运行此脚本:

$ python -m parent_pkg.model.script
Hi there

请注意,您需要在parent_pkg的父目录中运行此命令,否则Python将无法找到parent_pkg。在当前示例中,我从.目录运行脚本(遵循树结构)

您还可以指定此模块在PyCharm中运行,但是您可能需要将parent_pkg的父目录指定为工作目录:

enter image description here