仅当从已安装的包调用时,从子文件夹导入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 条评论
登录 后参与评论

相关文章

TOP 榜单

  1. 1

    来自Microsoft Office加载项taskpane.js的MySQL驱动程序模块的空引用

  2. 2

    使用AWS Cognito和React的仅限Facebook / Google的登录名(无用户名/密码)

  3. 3

    创建Windows Phone 8应用并将其连接到数据库的最佳方法(最好是SQL Server)

  4. 4

    为什么Java中的System.out.println()打印到控制台?

  5. 5

    卷曲函数无法解析来自bash中变量的代理

  6. 6

    是什么在Android的consumer-rules.pro和proguard-rules.pro之间的区别?

  7. 7

    设置与Apache POI Excel表散点图标记图标的颜色

  8. 8

    将Qt Pyside2与asyncio await语法一起使用?

  9. 9

    崇高的文字+蟒蛇的蟒蛇

  10. 10

    任务':app:minifyReleaseWithR8'.java.lang.NullPointerException的执行失败(无错误消息)

  11. 11

    OpenJDK的和AdoptOpenJDK的区别

  12. 12

    大型数据集缓存到Spark内存中时,“超出了GC开销限制”(通过sparklyr和RStudio)

  13. 13

    “执行测试CMAKE_HAVE_LIBC_PTHREAD”失败实际上是什么意思?

  14. 14

    使用Core 2.2中的Identity,如何在关闭浏览器15分钟后保持会话活动?

  15. 15

    React中的ForwardRefExoticComponent和ForwardRefRenderFunction有什么区别?

  16. 16

    猫鼬查找结果,然后将字段替换为findOne

  17. 17

    如何降级Google Colab的Torch版本

  18. 18

    Keras提前停止回调错误,val_loss指标不可用

  19. 19

    如何避免VSCode中的“导入路径不能以.ts扩展名结尾”错误?

  20. 20

    Nuxt.JS:如何在页面中获取路由URL参数

  21. 21

    是否有为什么会AccessibilityManager.sInstance导致内存泄漏的一个原因?

热门标签

归档