как мне скомпилировать из pyjet import без ошибки компиляции?

#python #pycharm

#python #pycharm

Вопрос:

Я пытаюсь скомпилировать код из следующего руководства: 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 * Ошибка типа: элемент в pyjet. все должно быть str, а не dtype

В чем, по-видимому, проблема?

Комментарии:

1. Можете ли вы добавить фактический код, который вы написали? Возможно, в нем есть ошибка, которую мы не найдем в руководстве.

2. мой код является копией-вставкой окончательного кода учебника

Ответ №1:

Я думаю, что есть проблема с библиотекой, которую вы используете в данный момент. Проблема возникает во время импорта, то есть до запуска любого вашего кода. Похоже, проблема связана с некоторой проблемой инициализации.

В частности, ссылка pyjet.all на то, что элементы должны быть строками, а dtype не заставляет меня предполагать, что по какой-то причине передается массив numpy, где он должен был быть обычным списком строк.

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

Я бы посоветовал удалить установленное вами программное обеспечение и убедиться, что вы установили правильную версию (ту, для которой написано руководство).