简体   繁体   English

无法在 Python 3 中导入模块

[英]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 triedmain.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM