【问题标题】:how do i compile from pyjet import without a compile error?如何从 pyjet 导入编译而不会出现编译错误?
【发布时间】:2021-01-08 15:52:05
【问题描述】:

我正在尝试编译以下教程中的代码:https://fluidenginedevelopment.org/documentation/python.html

这里是教程代码:

from pyjet import *
import sys
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

ANIM_NUM_FRAMES = 360
ANIM_FPS = 60


def main():
    # Create smoke solver
    resX = 100
    solver = GridSmokeSolver2(resolution=(resX, 2 * resX), domainSizeX=1.0)

    # Customize pressure solver for real-time sim (less accurate, but much faster)
    pressureSolver = GridFractionalSinglePhasePressureSolver2()
    pressureSolver.linearSystemSolver = FdmGaussSeidelSolver2(20, 20, 0.001)
    solver.pressureSolver = pressureSolver

    # Setup emitter
    sphere = Sphere2(center=(0.5, 0.5), radius=0.15)
    emitter = VolumeGridEmitter2(sourceRegion=sphere)
    solver.emitter = emitter
    emitter.addStepFunctionTarget(solver.smokeDensity, 0.0, 1.0)
    emitter.addStepFunctionTarget(solver.temperature, 0.0, 1.0)

    # Visualization
    fig = plt.figure()
    den = np.array(solver.smokeDensity.dataAccessor(), copy=False)
    im = plt.imshow(den, vmin=0, vmax=1, cmap=plt.cm.gray,
                    interpolation='bicubic', animated=True, origin='lower')

    # Animation
    frame = Frame(0, 1.0 / ANIM_FPS)
    def updatefig(*args):
        solver.update(frame)
        frame.advance()
        den = np.array(solver.smokeDensity.dataAccessor(), copy=False)
        im.set_data(den)
        return im,

    if len(sys.argv) > 1:
        format = sys.argv[1]
        if format == 'gif':
            anim = animation.FuncAnimation(fig, updatefig,
                                           frames=ANIM_NUM_FRAMES,
                                           interval=ANIM_FPS, blit=True)
            anim.save('smoke_example01.gif', fps=ANIM_FPS, dpi=72,
                      writer='imagemagick')
        elif format == 'mp4':
            anim = animation.FuncAnimation(fig, updatefig,
                                           frames=ANIM_NUM_FRAMES,
                                           interval=ANIM_FPS, blit=True)
            anim.save('smoke_example01.mp4', fps=ANIM_FPS, writer='ffmpeg')
    else:
        anim = animation.FuncAnimation(fig, updatefig, frames=ANIM_NUM_FRAMES,
                                       interval=1, blit=True)
        plt.show()


if __name__ == '__main__':
    Logging.mute()
    main()

在我将其更改为适合我正在制作的徽标之前。我已经安装了所有必需的库(在 pycharm 中),但在尝试编译时出现以下错误:

/home/kali/PycharmProjects/AndromedaLogo/venv/bin/python /home/kali/PycharmProjects/AndromedaLogo/main.py 回溯(最近一次通话最后): 文件“/home/kali/PycharmProjects/AndromedaLogo/main.py”,第 1 行,在 从 pyjet 导入 * TypeError: pyjet 中的项目。all 必须是 str,而不是 dtype

似乎是什么问题?

【问题讨论】:

  • 您可以添加您编写的实际代码吗?也许其中存在我们在教程中找不到的错误。
  • 我的代码是教程最终代码的复制粘贴

标签: python pycharm


【解决方案1】:

我认为您当前使用的库存在问题。该问题发生在导入时,即在您的任何代码运行之前。该问题似乎与某些初始化问题有关。

具体而言,pyjet.all 项目的引用必须是字符串而不是 dtype,这让我假设由于某种原因,一个 numpy 数组正在传递,它应该是一个正常的字符串列表。

TypeError: Item in pyjet.all must be str, not dtype

我建议删除您安装的软件并确保安装正确的版本(编写教程的那个版本)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2023-04-11
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    相关资源
    最近更新 更多