如何在Python 3.9中从与www.example.com相同的目录中导入类和函数main.py?

ldxq2e6h  于 2023-04-22  发布在  Python
关注(0)|答案(2)|浏览(109)

在Python 3.9中,我正在努力导入与main.py位于同一目录的本地源文件。我之前让它工作,但不知道为什么它工作。过了一段时间,它停止工作。
我创建了一个最小的示例来重现下面所示结构的问题。
我读过一些available answers建议在main.py中使用from . import car,这导致了以下错误:

(venv) [.../pyimport_example/productname]  python3 ./main.py
Traceback (most recent call last):
  File "/Users/myUser/pyimport_example/productname/./main.py", line 1, in <module>
    from . import car
ImportError: attempted relative import with no known parent package

使用from .car import Car时出现相同错误
我还尝试过将main.py作为一个模块运行,如“Relative imports in Python 3

(venv) [.../pyimport_example/productname] python3 -m main.py
Traceback (most recent call last):
  File "/usr/local/Cellar/python@3.9/3.9.10/Frameworks/Python.framework/Versions/3.9/lib/python3.9/runpy.py", line 188, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/usr/local/Cellar/python@3.9/3.9.10/Frameworks/Python.framework/Versions/3.9/lib/python3.9/runpy.py", line 111, in _get_module_details
    __import__(pkg_name)
  File "/Users/myUser/pyimport_example/productname/main.py", line 2, in <module>
    from .car import Car
ImportError: attempted relative import with no known parent package

对“Relative imports in Python 3”的回答似乎集中在一个人想在一个包中运行一个python文件作为脚本的情况下,这不是我遇到的问题。

我的示例项目

pyimport_example
├── README.md
├── productname
│   ├── __init__.py
│   ├── car.py
│   └── main.py
└── venv
    ├── bin
    ├── include
    ├── lib
    └── pyvenv.cfg

main.py含量

from .car import Car

def main():
    print("Maria ist cool.")

    mycar = Car("Ford", "Mustang", "1966")
    mycar.print_car()

if __name__ == '__main__':
    main()

car.py的内容

class Car:
    def __init__(self, make, model, year_manufacture):
        self.make = make
        self.model = model
        self.year_manufacture = year_manufacture

    def print_model(self):
        print("{0} {1} {2}".format(self.year_manufacture, self.make, self.model))

是否存在不修改系统路径的修复方法?

gjmwrych

gjmwrych1#

你必须修改你的__init__.py-文件。
在文件夹productname中,你要指定你可以从同一级别的模块中运行的导入:

from .car import *

现在,您应该能够使用以下命令将文件导入到main.py中:

from car import Car
np8igboo

np8igboo2#

对我来说,答案似乎很简单:

import car

相关问题