【问题标题】:cannot import name 'box_2d_to_points' from 'util'无法从“util”导入名称“box_2d_to_points”
【发布时间】:2019-10-30 23:43:28
【问题描述】:

我正在尝试使用 spyder 在 python 3.7 中运行以下代码

import numpy as np
import freud
from util import box_2d_to_points
import matplotlib.pyplot as plt

data_path = "data/phi065"
box_data = np.load("{}/box_data.npy".format(data_path))
pos_data = np.load("{}/pos_data.npy".format(data_path))

def plot_rdf(box_arr, points_arr, prop, rmax=10, dr=0.1, label=None, ax=None):
    """Helper function for plotting RDFs."""
    if ax is None:
        fig, ax = plt.subplots(1, 1, figsize=(12, 8))
        ax.set_title(prop, fontsize=16)
    rdf = freud.density.RDF(rmax, dr)
    for box, points in zip(box_arr, points_arr):
        rdf.accumulate(box, points)
    if label is not None:
        ax.plot(rdf.R, getattr(rdf, prop), label=label)
        ax.legend()
    else:
        ax.plot(rdf.R, getattr(rdf, prop))
    return ax

首先安装了一个名为“freud”的包(pip install freud) 然后当我运行时出现此错误,

ImportError: cannot import name 'box_2d_to_points' from 'util' (/opt/anaconda3/lib/python3.7/site-packages/util/__init__.cpython-37m-darwin.so)

所以我检查了是否使用

安装了包

pip show util

我得到了这个:警告:找不到包:util 注意:您可能需要重新启动内核才能使用更新的软件包。

是的,我确实重新启动了内核,没有任何改变。

当我尝试安装它时

pip install util

错误:找不到满足 util 要求的版本(来自版本:无) 错误:未找到 util 的匹配分布 注意:您可能需要重新启动内核才能使用更新的软件包。

我在网上搜索,发现它可以安装为pip install python-utils,但是它会创建一个不同的目录,即使我更改为from python_utils import box_2d_to_points,代码也不会编译。

但我认为无法读取包是一些目录问题。如果您查看随附的屏幕截图,在文件夹“freud”的库中,有一个文件夹“util”,其中包含文件“init.cpython-37m-darwin.so” 我想知道如何安装这个包。我按照(Install a Python package into a different directory using pip?) 中的解决方案,但仍然没有解决问题。

弗洛伊德包的文档可以在here找到:

and here is a screen shot of directories

提前谢谢你,

【问题讨论】:

  • 以后,如果您正在使用示例代码,请确保明确说明这一点并将用户指向该代码。在这种情况下,您似乎正在使用these demos from freud-examples 中的代码工作。这些已存档,并不意味着支持。 util.py 只是 Jupyter 笔记本加载的本地代码 - 不是模块。
  • 另外,如果你有 Anaconda,除非绝对必要,否则最好不要使用 Pip,也不要在 base 环境中使用它(参见“Using Pip in a Conda Environment”)。在这种情况下,conda install -c conda-forge freud在文档中明确说明,因此这是首选的安装命令。
  • 感谢您的反馈,我应该提到我使用conda install -c conda-forge freud 安装的,,,,,它没有加载或识别 util,我在文档中找不到如何使用 conda 安装 util ,这就是为什么我使用 pip install 代替,它仍然不起作用
  • 我明白了。是的,重点是,util 并不是一个真正的东西,它只是一个在一些旧示例中使用的文件。您可以下载该文件并将其放在您要编写的代码旁边,但我认为最好还是坚持使用较新的文档。

标签: python python-3.x pip conda importerror


【解决方案1】:

我是freud 包的维护者。这个与 util 文件混淆的问题之前由另一个用户 (https://github.com/glotzerlab/freud/issues/446) 报告,并已在昨天(2019 年 10 月 31 日)发布的 freud 库的 2.0 版中得到解决。

正如其他 cmets 和答案中所述,util.py 文件不包含在 freud 包中。它被用于 1.0 版的弗洛伊德文档示例中,并包含主要用于生成粒子系统和绘制结果的函数。因为这让一些新用户感到困惑,我们决定将其中许多功能直接合并到freud 包中。在少数情况下,我们选择在 util.py 文件中保留特定于绘图的代码,并清楚地记录文件的位置(例如:https://freud.readthedocs.io/en/stable/examples/module_intros/order.Hexatic.html)。选择分离实用函数的原因是 freud 主要是一个分析包,可视化选择通常留给用户(尽管从 v2.0 开始,许多计算对象都有辅助方法来使用 Matplotlib 绘制结果) )。

在 freud v2.0 中,对文档进行了修改。 上面引用的代码 sn-p 已针对 v2.0 中的新 API 进行了更新,不再依赖于 util.py 文件.新示例位于此处:https://freud.readthedocs.io/en/stable/examples/module_intros/density.RDF-AccumulateFluid.html

import numpy as np
import freud
import matplotlib.pyplot as plt

data_path = "data/phi065"
box_data = np.load("{}/box_data.npy".format(data_path))
pos_data = np.load("{}/pos_data.npy".format(data_path))

def plot_rdf(box_arr, points_arr, prop, r_max=10, bins=100, label=None, ax=None):
    """Helper function for plotting RDFs."""
    if ax is None:
        fig, ax = plt.subplots(1, 1, figsize=(12, 8))
        ax.set_title(prop, fontsize=16)
    rdf = freud.density.RDF(bins, r_max)
    for box, points in zip(box_arr, points_arr):
        rdf.compute(system=(box, points), reset=False)
    if label is not None:
        ax.plot(rdf.bin_centers, getattr(rdf, prop), label=label)
        ax.legend()
    else:
        ax.plot(rdf.bin_centers, getattr(rdf, prop))
    return ax

另外,我想确认pip install freud 不会得到正确的包。 freud 最初可通过 conda 渠道获得,但不能通过 Python 包索引 (PyPI)。当我们开始使用 pip 构建易于安装的轮子时,我们发现名称 freud 已经在 PyPI 上使用。 Installation page in the documentation 列出了正确的安装方法,如果使用 conda 环境,则当前为 conda install -c conda-forge freud,或 pip install freud-analysis

感谢您使用弗洛伊德,如果您有其他问题,请随时与the freud-users mailing listfreud's GitHub issues page 联系。

【讨论】:

  • 非常感谢您的 cmets,我浏览了您的新 freud 版本并注意到您更改了文档。尝试为流体运行累积 g(r) 时出现错误:
  • 类型错误----> 4 ax = plot_rdf(box_arr, pos_arr, 'rdf', label='One frame') <ipython-input-9-68714fb3e78e> in plot_rdf(box_arr, points_arr, prop, r_max, bins, label, ax) --->16 rdf.compute(system=(box, points), reset=False) TypeError: compute() takes at least 2 positional arguments (0 given)
  • @RacaioCmoto 在这里查看讨论groups.google.com/forum/…
【解决方案2】:

pip install freud 安装了错误的包。 installation page 显示命令 pip install freud-analysis。包freudfreud-analysis 是两个完全不同且不相关的包。

所以先卸载freud再安装freud-analysis

pip uninstall freud
pip install freud-analysis

不幸的是,即使是正确的freuddoesn't have box_2d_to_points。唯一提到box_2d_to_points 的是docsnowhere else。我认为你应该 ask the authors 他们的意思。

【讨论】:

  • 感谢您的回答,但我实际上也安装了 freud-analysis 并且它没有工作。
【解决方案3】:

查看GitHub 中的代码和存储库以及用户:phd 和merv 给出的评论后,我注意到有一个名为util.py 的文件。我将它复制到正确的目录中,并且能够在没有错误的情况下运行代码。如果您遇到文件丢失的其他问题,我认为正确的方法是确保您安装了正确的模块并在您的目录中有必要的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 2020-09-22
    • 2021-12-04
    相关资源
    最近更新 更多