gpt4 book ai didi

python - python中模块的相对路径

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:24 25 4
gpt4 key购买 nike

我尝试了一些不同的技术来尝试做一些对我来说似乎可行的事情,但我想我遗漏了一些关于 python 的陷阱(使用 2.7,但希望这也适用于 3.* 如果可能的话)。

我不确定包或模块等术语,但对我来说,以下似乎是一个“简单”的可行方案。

这是目录结构:

.
├── job
│   └── the_script.py
└── modules
   ├── __init__.py
   └── print_module.py

the_script.py内容:

# this does not work
import importlib
print_module = importlib.import_module('.print_module', '..modules')

# this also does not work
from ..modules import print_module

print_module.do_stuff()

print_module的内容:

def do_stuff():
print("This should be in stdout")

我想运行所有这些“相对路径”的东西:

/job$ python2 the_script.py

但是 importlib.import_module 给出了各种错误:

  • 如果我只使用 1 个输入参数 ..modules.print_module,那么我会得到:TypeError("relative imports require the 'package' argument")
  • 如果我使用 2 个输入参数(如上例所示),则会得到:ValueError: Empty module name

另一方面,使用 from ..modules 语法我得到:ValueError: Attempted relative import in non-package

我认为 __init__.py 空文件应该足以将该代码限定为“包”(或模块?不确定术语),但似乎我缺少一些关于如何管理相对路径。

我读到过去人们使用 pathimport osimport sys 中的其他函数来破解它,但是根据官方文档(python 2.7 和 3.*)不再需要了。

我做错了什么以及如何实现打印内容的结果 modules/print_module.do_stuff 从“相对目录”job/ 中的脚本调用它>?

最佳答案

如果您在此处遵循本指南的结构:http://docs.python-guide.org/en/latest/writing/structure/#test-suite (强烈推荐全部看完,很有帮助)你会看到这个:

To give the individual tests import context, create a tests/context.py file:

import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

import sample

Then, within the individual test modules, import the module like so:

from .context import sample

This will always work as expected, regardless of installation method.

在您的案例中翻译为:

root_folder
├── job
│ ├── context.py <- create this file
│ └── the_script.py
└── modules
├── __init__.py
└── print_module.py

context.py 文件中写入上面显示的行,但是 import modules 而不是 import samples

最后在您的 the_script.py 中:from .context import module 然后您就可以开始了!

祝你好运:)

关于python - python中模块的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42890302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com