Python没有名为X的模块-绝对导入

达布瑞斯

在我什至开始之前,我想说-我知道,有类似这样的不计其数的问题,但是我找不到我的问题的答案。我有这样的目录结构:

.
├── project
│   ├── A
│   │   ├── __init__.py
│   │   └── somelib.py
│   ├── B
│   ├── C
│   │   └── C
│   │       ├── foo.py
│   │       └── __init__.py
│   └── __init__.py
└── run.sh

run.sh

python3 project/C/C/foo.py

foo.py

from project.A.somelib import somefunc


VS Code实际上获得了智能感知功能foo.py-它告诉我可以从中导入哪些功能/变量somelib但是当我运行时run.sh,出现以下错误消息:

from project.A.somelib import somefunc
ModuleNotFoundError: No module named 'project'

有什么办法可以在保留目录结构的同时解决此问题?


  • 添加project/__init__.py没有改变
  • sys.pathfoo.py如下所示:
['/home/dabljues/projects/project/project/C/C', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/usr/lib/python3.7/site-packages']

限制条件:

  • 我既不能sys.path在文件中也不能PYTHONPATH在运行脚本之前进行修改
  • 我无法安装任何东西
  • 我没有sudo访问
  • 我无法创建virtualenv,因为这些脚本应该可以下载并可以快速执行。
阿恩

像VSCode或Pycharm这样的IDE会对项目做自己的假设,并且即使最终运行代码的解释器不能正常运行,它们也通常会正确链接模块。

project.A.somelibsys.path输出中可见无法找到原因的原因,这为您提供了python搜索模块的位置。由于'/home/dabljues/projects/project/project'不包括在内,因此python在运行时无法解决它。


快速破解

您只需手动添加路径sys.path运行,无论是在源文件中import sys; sys.insert(0, '/home/dabljues/projects/project/project/')foo.py任何其他进口发生前,或通过运行export PYTHONPATH="${PYTHONPATH}:/home/dabljues/projects/project/project/"在之前你的shell run.sh


安装项目

由于您似乎正在开发库,因此不妨使用python提供的机制使库可共享,从而解决所有导入问题。setup.py在项目根目录(即/home/dabljues/projects/project/project/setup.py)中添加一个最小值

from setuptools import setup, find_packages


setup(
    name='project',
    version='0.1.0',
    packages=find_packages('project'),
)

并以可编辑模式安装项目:

$ python3 -m pip install -e .

这将在python3可执行文件的链接中site-packages指向项目根目录的链接,使您在每次使用时都可以访问它python3


测验

我将其包含print(__name__)在所有python文件的顶部,以获取一些输出。

在不安装软件包的情况下运行run.sh:

$ sh run.sh 
Traceback (most recent call last):
  File "project/C/C/foo.py", line 1, in <module>
    from project.A.somelib import somefunc
ModuleNotFoundError: No module named 'project'

安装后

$ sh run.sh 
__main__
project.A.somelib

如您所见,它project.C.C.foo是作为脚本执行的,但它会找到所有project因为project安装而开头的导入

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python导入-ModuleNotFoundError:没有名为X的模块

ModuleNotFoundError:导入模块时没有名为“ x”的模块

相对导入-ModuleNotFoundError:没有名为x的模块

Python导入错误:没有名为<myPackage>的模块

导入错误Python:没有名为“ card”的模块

无法导入包“没有名为<模块名称>的模块”

导入错误Python 2.7。没有名为以下模块的模块:

AWS Lambda:无法导入模块“ python_handler”:没有名为“ _cffi_backend”的模块

Cron不会导入pandas模块来执行python脚本。``ImportError:没有名为pandas的模块。''

导入错误:没有名为PyQT5(Win7x64)的模块

Django-导入错误:没有名为* .urls的模块

导入错误:没有名为 ntlk 的模块

导入错误:没有名为matlab.engine的模块

导入错误:没有名为蜘蛛的模块

使用spacy导入错误:“没有名为en的模块”

没有名为HelloTemplate导入错误的模块

导入错误:没有名为numpy的模块

django-导入错误:没有名为视图的模块

导入错误:没有名为“libs.utils”的模块

Tensorflow导入错误:没有名为'tensorflow'的模块

为什么导入错误:没有名为lightgbm的模块

导入错误:没有名为“ scipy._lib”的模块

在PyCharm中没有名为...的模块(导入错误)

ImportError:没有名为pydot的模块(无法导入pydot)

导入错误,没有名为xxxx的模块

Django存储:导入错误-没有名为存储的模块

导入错误:没有名为事务的模块

无法导入Tensorflow“没有名为copyreg的模块”

导入httplib ImportError:没有名为httplib的模块

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导致内存泄漏的一个原因?

热门标签

归档