python - 无法在 Python 3 中导入模块
问题描述
我有一个布局
pylib/
apps/
main.py
libs/
MyClass.py
__init__.py
其中MyClass.py
是
class MyClass:
pass
if __name__ == "__name__":
obj = MyClass()
main.py
我试过了
from pylib.libs.MyClass import MyClass
obj = MyClass()
并得到
ModuleNotFoundError:没有名为“pylib”的模块
from ..libs.MyClass import MyClass
obj = MyClass()
并得到
ImportError:尝试在没有已知父包的情况下进行相对导入
from libs.MyClass import MyClass
obj = MyClass()
并得到
ModuleNotFoundError:没有名为“libs”的模块
如果有人知道如何解决它,我会很高兴
解决方案
问题是包含的文件夹pylib
不在路径上。您可以通过将包含文件夹添加到PYTHONPATH
环境变量来解决此问题。
➜ apps python3 main.py
Traceback (most recent call last):
File "main.py", line 1, in <module>
from pylib.libs.MyClass import MyClass
ModuleNotFoundError: No module named 'pylib'
➜ apps cd ..
➜ pylib cd ..
➜ temp-code export PYTHONPATH=`pwd` # This is the fix!
➜ apps python3 main.py
(no error)
另一种方法是在代码中包含逻辑:
import os
import sys
project_home = '/home/username/temp-code/'
if project_home not in sys.path:
sys.path = [project_home] + sys.path
在这种情况下,pylib
文件夹位于文件夹内,temp-code
并且此代码在您导入类之前运行。
希望有帮助!
参考:https ://docs.python.org/3/using/cmdline.html?highlight=pythonpath#envvar-PYTHONPATH
推荐阅读
- python-3.x - 无法从图像中提取数字
- typo3 - Typ3 的 ke_search 扩展不显示字符长度小于 4 的单词
- javascript - 鼠标点击调用函数
- python - 在 PySpark Dataframes 中添加列需要时间
- postgresql - postgresql`在时区`不正确的行为?
- c# - Resources.MergedDictionaries 需要在每个窗口加载时添加
- c# - 无法转换任务
- > 到任务
> - swift - 快速加载视图控制器时执行方法
- sharepoint - 如何过滤获取项目查询?
- symfony4 - Symfony 4.3:return $this->json($entity) 有时会返回空结果