当我想在特定文件夹中安装某个Python软件包(使用pip install -t),然后从该软件包导入模块时,出现错误。
我将问题发布在软件包的Github上,结果证明我无法在特定文件夹中安装软件包;不支持以这种方式安装软件包。
即使没有google合作,我也可以尝试使用pip install -t sklearnFolder在某些特定文件夹中安装sklearn,然后将其作为sklearnFolder.sklearn.manifold导入时重现导入错误。
这不是安装/使用scikit-lean的受支持方法。之所以不起作用的原因之一是scikit-learn中的一些模块使用了绝对导入(例如从sklearn导入某些内容),但这种设置会失败。
您应该使用pip install进行安装,或者如果您希望将其安装在某个特定文件夹中,则将存储库克隆到该文件夹,然后运行pip install -e,在两种情况下,它都将作为sklearn导入。
来自https://github.com/scikit-learn/scikit-learn/issues/11656
我不太理解。
我想过
from folderName.package import module
与
相同from package import module
因为它们都是绝对进口。与之相同,它们都完全指定了导入模块的路径。因此,我的理解有些不足,但我不知道这是什么。
答案 0 :(得分:1)
在导入中,您没有指定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__.py软件包。如果在示例中看到,则保留文件夹具有__init__.py。
from reservation import hotels
如果要导入酒店下的子模块,则将在该包之前添加前缀:
from reservation.hotels import restaurents
或者,您可以直接导入子模块,但是在使用时必须在包之前加上前缀:
import reservation.hotels.restaurents