无法从“ util”导入名称“ box_2d_to_points”

时间:2019-10-30 23:43:28

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

我正在尝试使用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)的软件包 然后当我运行时出现此错误,

导入错误:无法从“实用程序”(/opt/anaconda3/lib/python3.7/site-packages/util/__init__.cpython-37m-darwin.so)导入名称“ box_2d_to_points”

所以我检查了是否使用

安装了软件包

pip show util

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

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

当我尝试安装时

pip install 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?)中的解决方案,但仍然没有解决问题。

freud软件包的文档可以在here中找到:

and here is a screen shot of directories

先谢谢您,

3 个答案:

答案 0 :(得分:1)

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

如其他评论和答案所述,util.py文件未包含在freud软件包中。它在1.0版的弗洛伊德文档示例中使用,并且包含大多数用于生成粒子系统和绘制结果的函数。因为这使几个新用户感到困惑,所以我们决定将其中许多功能直接合并到freud包中。在某些情况下,我们选择使用特定于绘图的代码保留util.py文件,并明确记录可以在哪里找到该文件(例如:https://freud.readthedocs.io/en/stable/examples/module_intros/order.Hexatic.html)。之所以选择分隔实用程序功能,是因为freud主要是一个分析包,可视化选项通常留给用户使用(尽管从v2.0开始,许多计算对象都有用于绘制结果的辅助方法)使用Matplotlib)。

在弗洛伊德v2.0中,文档已修订。上面引用的代码段已针对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 Package Index(PyPI)获得。我们发现在开始使用freud来安装车轮时,PyPI已经使用了pip这个名称。 Installation page in the documentation列出了正确的安装方法,如果使用的是conda环境,则当前为conda install -c conda-forge freud,或者为pip install freud-analysis

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

答案 1 :(得分:0)

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

因此,首先卸载freud,然后再安装freud-analysis

pip uninstall freud
pip install freud-analysis

不幸的是,即使正确的freud doesn't have box_2d_to_pointsbox_2d_to_points仅在docsnowhere else中提及。我认为您应该ask the authors是什么意思。

答案 2 :(得分:0)

浏览了GitHub中的代码和存储库并指出了用户:phd和merv给了,我注意到有一个名为util.py的文件。我将其复制到正确的目录,并且能够运行代码而不会出现错误。如果遇到文件丢失的其他问题,我认为正确的方法是确保安装了正确的模块并在目录中包含必要的文件。