1

'module' object has no attribute 'Vector3'的简单 python 代码出错了。

这是rightAngle.py文件

import meep as mp
import math

cell = mp.Vector3(16, 8, 0)
geometry = [mp.Bloack(mp.Vector3(1e20, 1, 1e20),
                      center = mp.Vector3(0, 0),
                      material = mp.Medium(epsilon = 12))]
sources = [mp.Source(mp.ContinuousSource(frequency = 0.15),
                     component = mp.Ez,
                     center = mp.Vector3(-7, 0))]
pml_layers = [mp.PML(1.0)]
resolution = 10

编译使用:

python rightAngle.py >& rightAngle.out

并得到这个输出:

Traceback (most recent call last):
  File "rightAngle.py", line 4, in <module>
    cell = mp.Vector3(16, 8, 0)
AttributeError: 'module' object has no attribute 'Vector3'

我所做的只是从这个相当可靠的来源Vector3复制和粘贴给定的代码,但在对象中出现错误。

蟒蛇版本:

Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2

我不知道我错过了什么?

Meep 文档: https ://meep.readthedocs.io/en/latest/Python_Tutorials/Basics/

4

2 回答 2

1

尝试在 Ubuntu 16.04 上使用它时遇到了同样的问题。

对我有用的是为 python 2.7安装Anaconda并使用以下方法创建他们推荐的环境

conda create -n mp -c chogan -c defaults -c conda-forge pymeep

之后没有 Vector3 问题。

于 2018-01-30T18:40:00.280 回答
0

我的环境脚本在下面,但我不会在这里详细介绍。我的计划是根据我当前的工作设置创建一个 git 存储库,并在 Github 上公开,这将迫使我组织整个设置并使其对其他人有用。

以下脚本允许我在没有 Anaconda3 的情况下使用 python3 运行 Meep。这样你就可以使用最新的包和 git 源来构建 Meep、Open MPI 和支持库。我的主目录被替换为

    #!/bin/bash

export MPI_PROJ=/home/<USER>/projects/mpi

export MPI_BASE=/usr/local/mpi/openmpi/base

export MPI_411=$MPI_BASE/411

# 
# CRITICAL ENVARS - THESE MUST BE SET AS FOLLOWS FOR THE EXISTING MEEP, MPB AND OPENMPI 4.1.1
# 
export LD_LIBRARY_PATH="/usr/local/mpi/meep/latest/lib:/usr/local/mpi/openmpi/base/411/bin:/home/fraser/.local/bin:/usr/local/bin:/usr/bin:/opt/bin:/bin:/sbin:/home/fraser/projects/mpi/bin" 

export CFLAGS="-I/usr/local/mpi/meep/latest/include  -I/usr/local/mpi/mpb/latest/include -I/usr/include/python3.8"

export PKG_CONFIG_PATH="/usr/local/mpi/meep/latest/lib/pkgconfig:/usr/local/mpi/openmpi/base/411/lib/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/local/mpi/meep/latest/lib/pkgconfig"

export LDFLAGS="-L/usr/local/mpi/openmpi/base/411/lib  -L/usr/local/mpi/meep/latest/lib -lmpi -lmpb"

export PYTHONPATH="/home/fraser/.local/lib/python3.8/site-packages:/usr/lib/python3.8:/usr/local/mpi/meep/latest/lib/python3.8/site-packages:/usr/local/lib/python3.8/dist-packages"

export PATH=/home/fraser/projects/mpi/bin:/usr/local/mpi/meep/latest/bin:/usr/local/mpi/openmpi/base/411/bin:/home/fraser/.local/bin:/usr/local/bin:/usr/bin:/opt/bin:/bin:/sbin

Open MPI 4.1.1 首先构建了很多次,以便在 3 台真机和 2 台虚拟机上正确运行。最后,所有 3 个 Centos 8 Stream 安装完美地一起运行了 mpi。两台 ubuntu 21 机器(一台真实机器,一台虚拟机)能够完美地一起运行 mpi。Centos 8 机器将与 Ubuntu 21 机器通信。由于 glibc 版本差异,我无法在 Ubuntu 21 和 Centos 8 Stream 之间复制 mpi 安装。

然后转到 Meep,它需要“从源代码构建 Meep”文档页面中列出的所有库。有些不能从 Mint 20 repos 中获得,必须从源代码构建。创建构建脚本来为每个脚本运行配置,以记录使用的选项。

Meep 需要特定的harminv、fftw3、guile、swig、hdf5 版本。其他库是使用 apt 从 mint 20 软件包存储库安装的。

Meep 也被多次构建,因为我的环境是设置权限以从 /usr/local 以外的位置运行 Meep。需要一些修补才能使上述环境变量足够接近。他们可能需要根据您的目的进行一些调整。

中间更新 - 我能够在 Centos 8 Stream 上的 Mint20 Linux 上复制我的成功。将所有工作部分收集到一个 git 存储库中,并记录似乎没有人在 StackOverflow 甚至 Github 问题上发布的小细节!例如,在 swig git clone 中运行 AUTOGEN 之前导出 PY3=1。否则它想使用python 2!

另一个问题是:例如,将您的克隆保存为 git-meep。然后复制给meep。然后在meep上工作。如果您使用 configure/make/make test/make install 超过 5 次,或者没有注意到任何代码或环境更改,请删除 meep 树。确保在删除之前保存任何环境设置或配置运行脚本。

在运行任何环境设置脚本之前,将 git-meep 复制到 meep 并再次运行 autogen.sh。然后运行它们,然后运行任何运行配置和/或制作的脚本。

我的配置脚本严格运行配置。然后我手动运行 make/make check/make install,以防构建失败。

还有更多奇怪的事情要做,使这项工作。

当 github 存储库在线时将在此处发布。

于 2021-10-02T01:10:17.000 回答