繁体   English   中英

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

[英]Relative module paths in python - how to configure paths (and 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等),其中包括类、例如,由script.py导入的Class

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 或命令行中运行。 请帮忙!

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

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

这些文件内容:

模块1.py

class Class1:
    pass

脚本文件

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的父目录作为工作目录:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM