无法在 Python 3 中导入模块
Can't import modules in 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
文件夹内,此代码在您导入 class.
之前运行
希望对您有所帮助!
参考:https://docs.python.org/3/using/cmdline.html?highlight=pythonpath#envvar-PYTHONPATH
我有这样的布局
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
文件夹内,此代码在您导入 class.
希望对您有所帮助!
参考:https://docs.python.org/3/using/cmdline.html?highlight=pythonpath#envvar-PYTHONPATH