仅当从已安装的包调用时,从子文件夹导入Python失败

哈切尔

最近从python2切换到python3.8之后,我遇到了问题。

这是我的文件设置(摘要):

package/
       __init__.py
       main.py
       modules/
              __init__.py
              log.py

在python2中,我曾经使用以下命令将log.py导入main.py:

import modules.log

当我在python3中执行此操作并使用以下命令从控制台调用main.py时

python /path/to/package/main.py

一切正常。

但是然后我从中创建一个python包,并将其安装在archlinux / raspberrypi上,并通过控制台通过以下命令调用脚本:

 /usr/bin/package

它告诉我

$ package
Traceback (most recent call last):
  File "/usr/bin/package", line 11, in <module>
    load_entry_point('package==3.1.1', 'console_scripts', 'package')()
  File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2852, in load_entry_point
    return ep.load()
  File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2443, in load
    return self.resolve()
  File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2449, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python3.8/site-packages/package/main.py", line 5, in <module>
    import modules.log
ModuleNotFoundError: No module named 'modules'

知道为什么它不起作用吗?我想它一旦安装为软件包,便会出现在不同的地方。

提前致谢

编辑:将导入更改为时,我可以成功运行该程序包

from package.modules import log

但是,只有将其作为软件包安装时,它才起作用。从我的IDE(未将其作为软件包安装)运行它自然会导致错误

ModuleNotFoundError: No module named 'package'
寡头

您可以使用相对导入来进行包内引用,例如,要进行以下main.py引用log.py

import .modules.log

importPython 2和3之间的行为发生了巨大变化。请参阅《保守的Python 3移植指南:导入》。

对于本地开发,有一个不错的选择将软件包安装为符号链接

pip install -e ./ --user

在这种情况下,它将使您安装的软件包与源保持最新,同时您将能够照常使用此软件包。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在已安装的文件夹中运行Docker映像命令

来自分类Dev

从测试文件夹导入烧瓶模块失败

来自分类Dev

从子文件夹调用数据库种子

来自分类Dev

Python Markdown安装的文件夹

来自分类Dev

配置凉亭仅安装dist文件夹

来自分类Dev

从文件夹导入python模块

来自分类Dev

配置Aurelia CLI以从子文件夹提供应用程序捆绑包

来自分类Dev

Python,Django-查找已安装软件包的文件夹

来自分类Dev

在子文件夹中导入Python

来自分类Dev

从子文件夹导入javascript程序包

来自分类Dev

Python打包:了解根文件夹,从包文件导入,

来自分类Dev

从子文件夹调用方法

来自分类Dev

在已安装的文件夹中运行Docker映像命令

来自分类Dev

从子文件夹导入主文件(不是另一个模块)

来自分类Dev

从Python中的测试文件夹导入

来自分类Dev

如何根据已安装的文件夹查找iso映像?

来自分类Dev

从子文件夹链接dll

来自分类Dev

使用__init__从子文件夹文件的父目录中导入?

来自分类Dev

从子文件夹调用批处理文件时,如何获取当前目录名称?

来自分类Dev

在已安装的Python包中导入

来自分类Dev

将模块从子文件夹导入到父文件夹

来自分类Dev

从子文件夹移动文件

来自分类Dev

Python无法在相同的文件夹结构中导入包

来自分类Dev

已安装 NAS 存储的文件夹权限

来自分类Dev

Laravel:从子文件夹扩展文件

来自分类Dev

在python中将文件夹作为包导入

来自分类Dev

从子文件夹动态 Vue 导入

来自分类Dev

python从子文件夹导入

来自分类Dev

如何从文件夹导入python文件