[英]Can't import modules in Python 3
I have a layout like我有一个像
pylib/
apps/
main.py
libs/
MyClass.py
__init__.py
In which MyClass.py
is其中
MyClass.py
是
class MyClass:
pass
if __name__ == "__name__":
obj = MyClass()
and in main.py
I've tried在
main.py
我试过
from pylib.libs.MyClass import MyClass
obj = MyClass()
And got并得到
ModuleNotFoundError: No module named 'pylib' ModuleNotFoundError: 没有名为“pylib”的模块
from ..libs.MyClass import MyClass
obj = MyClass()
And got并得到
ImportError: attempted relative import with no known parent package导入错误:尝试在没有已知父包的情况下进行相对导入
from libs.MyClass import MyClass
obj = MyClass()
And got并得到
ModuleNotFoundError: No module named 'libs' ModuleNotFoundError: 没有名为“libs”的模块
If someone knows how to fix it I'd be very glad如果有人知道如何修复它,我会很高兴
The issue is that the folder that contains pylib
is not on the path.问题是包含
pylib
的文件夹不在路径上。 You can fix this by adding the containing folder to the PYTHONPATH
environment variable.您可以通过将包含文件夹添加到
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)
Another way you could do it is to include the logic in your code:另一种方法是在代码中包含逻辑:
import os
import sys
project_home = '/home/username/temp-code/'
if project_home not in sys.path:
sys.path = [project_home] + sys.path
In this case, the pylib
folder is inside of the temp-code
folder and this code runs before you import your class.在这种情况下,
pylib
文件夹位于temp-code
文件夹内,并且此代码在您导入类之前运行。
Hope that helps!希望有帮助!
Reference: https://docs.python.org/3/using/cmdline.html?highlight=pythonpath#envvar-PYTHONPATH参考: https : //docs.python.org/3/using/cmdline.html?highlight=pythonpath#envvar-PYTHONPATH
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.