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

python中的相对模块路径-如何配置路径(和PyCharm),python,module,path,pycharm,Python,Module,Path,Pycharm,我正在使用PyCharm(在Windows机器上)编写python 3.7脚本。该脚本由同事编写,并已在多台计算机上运行。我不想对文件结构或脚本进行任何更改(我稍后将进行的算法更改除外),因此可以将其合并回原始repo。 但是,相对路径存在一个问题。我希望我可以通过改变我机器上的配置来解决这个问题 我把同事的github回购分成C:\Users…\project 我正在使用的脚本是C:\Users…\project\…\model\script.py 除了script.py,目录(源目录)C:\

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

我把同事的github回购分成
C:\Users…\project
我正在使用的脚本是
C:\Users…\project\…\model\script.py

除了
script.py
,目录(源目录)
C:\Users…\project\…\model
还包含许多模块(
module1.py
module2.py
,等等),其中包括类,例如
script.py
导入的
Class

C:\Users…\project\…\model
包含一个空的
\uuuu init\uuuuu.py
文件,并且在PyCharm中,
C:\Users…\project\…\model
标记为
库根

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

script.py
包含来自..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中或从命令行运行。请帮忙

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

.
└── parent_pkg
    ├── __init__.py
    └── model
        ├── __init__.py
        ├── module1.py
        └── script.py
这些文件包括:

模块1.py

script.py

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

$ python -m parent_pkg.model.script
Hi there
请注意,您需要在
parent\u-pkg
的父目录中运行此命令,否则Python将无法找到
parent\u-pkg
。在当前示例中,我从
目录运行脚本(遵循树结构)

您也可以指定此模块在PyCharm中运行,但您可能需要指定
parent\u pkg
的父目录作为工作目录:


谢谢@awesoon OK:上面的文件夹
model
modeling
,它包含一个空的
\uuuu init\uuuuuuuuuy.py
,因此结构如您所建议。但是,当按照您的建议运行时,从PyCharm,我得到
无法打开文件'modeling.model.script':[Errno 2]没有这样的文件或目录
,从命令行我得到'ModuleNotFoundError:没有名为'modeling'的模块@doctorer您确定该文件名为
\u innit\uu
(双n)?因为它应该是
\uuuu init\uuuuu
(单个n),所以也请确保从
建模
上方的目录运行此脚本,否则python将无法在当前目录中找到
建模
modeling
上面的目录可能是一个普通目录,即没有
\uuu init\uuuu.py
@doctorer如果您在
modeling
上面有其他目录,我想您也需要将它们包括在模块路径中。或者,您可以尝试更改
工作目录
@doctor。您不必将
-m
添加到解释器选项中,因为PyCharm已经允许在文件/模块执行之间切换。请参见第一行的“模块名称”下拉列表
from ..model.module1 import Class1


if __name__ == '__main__':
    c = Class1()
    print('Hi there')
$ python -m parent_pkg.model.script
Hi there