需要帮助了解Python中相对导入和绝对导入的相关问题吗

需要帮助了解Python中相对导入和绝对导入的相关问题吗,python,import,python-import,Python,Import,Python Import,当我想在特定文件夹中安装某个Python包(使用pip install-t),然后从该包中导入模块时,我遇到了一个错误 我在软件包的Github上发布了这个问题,结果发现我无法在某个文件夹中安装软件包;不支持以这种方式安装包 即使没有google collab,我也可以在尝试使用pip install-t sklearnFolder在某个特定文件夹中安装sklearn,然后将其作为sklearnFolder.sklearn.manifold导入时重现导入错误 这不是安装/使用scikit lea

当我想在特定文件夹中安装某个Python包(使用pip install-t),然后从该包中导入模块时,我遇到了一个错误

我在软件包的Github上发布了这个问题,结果发现我无法在某个文件夹中安装软件包;不支持以这种方式安装包

即使没有google collab,我也可以在尝试使用pip install-t sklearnFolder在某个特定文件夹中安装sklearn,然后将其作为sklearnFolder.sklearn.manifold导入时重现导入错误

这不是安装/使用scikit lean的受支持方式。它不起作用的一个原因是,scikit learn中的一些模块使用绝对导入(例如,从sklearn导入某物),这将导致此类设置失败

您应该使用pip install安装它,或者如果您想将它放在某个特定的文件夹中,将repo克隆到该文件夹,然后运行pip install-e,在这两种情况下,它都将作为sklearn导入

我不太明白这个解释

我的想法是

from folderName.package import module

from package import module

因为它们都是绝对进口。与中一样,它们都完全指定导入模块的路径。所以我的理解有些偏差,但我不知道是什么

在导入中,不指定folderName作为包的前缀。如果包已安装或位于python路径中,则只需使用包名进行导入

    # Assume the below structure is under a directory (folder) called /app/home/packages.

    reservation/                  This is your top-level pacakge 
        __init__.py               Initialize the package
        hotels/                   Subpackage for hotel reservations
            __init__.py
            slots.py
            bid.py
            demand.py
            ...
            restaurents/                  Another Subpackage under hotels 
                __init__.py
                cuisine.py
                hours.py
                tableslots.py
                ...
        rewards/                      Subpackage for rewards
            __init__.py
            points.py
            discounts.py
            membersonly.py
            ...
由于包位于/app/home/packages下,因此以下导入无效,因为您在文件夹名称前加了前缀

    from packages.reservation import hotels 
正确的导入方法是从实际的包中导入,该包具有包初始化_init__u;.py。如果您在示例中看到,reservation文件夹具有uuu init_uuuu.py

    from reservation import hotels 
如果要导入hotels下的子模块,则将使用包作为前缀:

   from reservation.hotels import restaurents
或者,您可以直接导入子模块,但在使用包时,您必须以包为前缀:

   import reservation.hotels.restaurents

如果包位于其他文件夹中,而不是python路径中,该怎么办?如果它位于非python位置,则必须附加路径<代码>从myscript导入x,y,z导入系统路径.append('/app/home/others')