首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python子模块导入

Python子模块导入
EN

Stack Overflow用户
提问于 2018-04-10 11:23:16
回答 2查看 3.2K关注 0票数 2

我试着阅读其他类似的问题,但答案对我没有用,比如.pymodule has no attribute

我有这样的文件夹结构:

代码语言:javascript
复制
python_scripts
├── lib
│   ├── __init__.py      # import lib.talk
│   └── talk.py          # def sayhello(x): print(x)
│   
├── src
│   ├── __init__.py      # import lib.talk
│   └── data
│       ├── __init__.py  # import lib.talk
│       └── main.py      # from lib.talk import sayhello
│                          sayhello('hi')
│
└── __init__.py          # import lib.talk

这会引发一个错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from lib.talk import sayhello
ModuleNotFoundError: No module named 'lib.talk'

奇怪的是,如果我只是在main.py中‘导入lib’,就没有错误。我该怎么解决这个问题?

我使用的是Windows,我非常希望避免使用sys.path方法,因为我们不想硬编码路径(这可能会在将来被其他团队使用)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-10 11:31:03

在您的main.py文件中,在顶部添加以下内容。

代码语言:javascript
复制
import sys
path = r'{path_to_python_scripts}'

if path not in sys.path:
    sys.path.append(path)

# Now import
import lib

代码语言:javascript
复制
import sys, os
path = os.path.abspath('../..')

if path not in sys.path:
    sys.path.append(path)

# Now import
import lib

How to import a module given the full path?

票数 4
EN

Stack Overflow用户

发布于 2018-04-10 12:37:43

使用from ...lib import talk。您的import lib.talk无法工作,因为lib是一个包,因为__init__.pylib字典中。您也可以使用path附加方式,但是您需要获得如下内容:

代码语言:javascript
复制
import os, sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'libs')))

这样,无论Python代码存储在何处,您都将始终动态地将路径附加到库中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49752378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档