我正在通过Jupyter(Ubuntu 14.04)在p2.xlarge AWS服务器上运行python 2.7脚本.我希望能够渲染我的模拟.
最小的工作示例
import gym
env = gym.make('CartPole-v0')
env.reset()
env.render()
Run Code Online (Sandbox Code Playgroud)
env.render() 使(除其他外)以下错误:
...
HINT: make sure you have OpenGL install. On Ubuntu, you can run
'apt-get install python-opengl'. If you're running on a server,
you may need a virtual frame buffer; something like this should work:
'xvfb-run -s \"-screen 0 1400x900x24\" python <your_script.py>'")
...
NoSuchDisplayException: Cannot connect to "None"
Run Code Online (Sandbox Code Playgroud)
我想有些人能够看到模拟.如果我可以将它内联,那将是理想的,但任何显示方法都会很好.
编辑:这只是某些环境的问题,如经典控件.
更新我
灵感来自这个我尝试以下,而不是xvfb-run -s \"-screen 0 1400x900x24\" python <your_script.py>(我不能去上班).
xvfb-run -a jupyter …Run Code Online (Sandbox Code Playgroud) 我有过Pygame的一些经验,但是这些天似乎有很多关于Pyglet的嗡嗡声.
这两个库如何比较?在功能和易用性方面,使用一个优于另一个的优势是什么?
最后,你会说一个比另一个更Pythonic吗?
我想知道什么是最好的开始,pyglet或pygame?哪一个更快,哪一个更活跃?
我还想知道pyglet是否会获得python 3支持,因为我在这里读到它可能不可能或者需要很长时间.
选择pygame是不是更好,因为python 3支持,或者我应该使用pyglet?
谢谢.
我希望对openGL和Python做一些修改,并且无法找到使用PyOpenGl和pyglet的充分理由
你会推荐哪个?为什么?
我尝试使用pygame来播放这样的wav文件:
import pygame
pygame.init()
pygame.mixer.music.load("mysound.wav")
pygame.mixer.music.play()
pygame.event.wait()
Run Code Online (Sandbox Code Playgroud)
但它改变了声音,我不知道为什么!我看了这个链接解决方案,并不能解决我的播放波形文件的问题!
对于这个解决方案,我不知道应该导入什么?
s = Sound()
s.read('sound.wav')
s.play()
Run Code Online (Sandbox Code Playgroud)
对于这个解决方案/ dev/dsp在新版本的linux中不存在:
from wave import open as waveOpen
from ossaudiodev import open as ossOpen
s = waveOpen('tada.wav','rb')
(nc,sw,fr,nf,comptype, compname) = s.getparams( )
dsp = ossOpen('/dev/dsp','w')
try:
from ossaudiodev import AFMT_S16_NE
except ImportError:
if byteorder == "little":
AFMT_S16_NE = ossaudiodev.AFMT_S16_LE
else:
AFMT_S16_NE = ossaudiodev.AFMT_S16_BE
dsp.setparameters(AFMT_S16_NE, nc, fr)
data = s.readframes(nf)
s.close()
dsp.write(data)
dsp.close()
Run Code Online (Sandbox Code Playgroud)
当我尝试pyglet它给我这个错误:
import pyglet
music = pyglet.resource.media('mysound.wav')
music.play()
pyglet.app.run()
--------------------------
nima@ca005 Desktop]$ python …Run Code Online (Sandbox Code Playgroud) Pyglet使用AVBin来解码MP3.链接:http://avbin.github.com/AVbin/Download.html
使用install.sh安装,使用时会导致错误:
'AVbin is required to decode compressed media')
pyglet.media.riff.WAVEFormatException: AVbin is required to decode compressed media
Run Code Online (Sandbox Code Playgroud)
...所以它安装不正确?使用python virtualenv,怀疑这可能会导致问题...虽然我在virtualenv中运行了AVBin的install.sh,如下所示:
(SoundShenanigans)user@computer:~/Downloads/avbin-linux-x86-64-v8$ sudo bash install.sh
Run Code Online (Sandbox Code Playgroud)
UPDATE
我找到了安装avbin的地方......似乎安装在正确的位置= S.
~/pyvien/SoundShenanigans/lib/python2.7/site-packages/pyglet/media$ ls
avbin.py drivers __init__.pyc procedural.pyc riff.pyc
avbin.pyc __init__.py procedural.py riff.py
Run Code Online (Sandbox Code Playgroud)
更新2
该库是.so,而不是.dylib,为什么你想要.dylib神秘的代码?这是Linux而不是Mac(Mac有.dylib,Ubuntu有.so)
File "SoundShenanigans.py", line 4, in
from pyglet.media import avbin
File "/home/user/pyvien/SoundShenanigans/local/lib/python2.7/site-packages/pyglet/media/avbin.py", line 53, in
darwin='/usr/local/lib/libavbin.dylib')
File "/home/user/pyvien/SoundShenanigans/local/lib/python2.7/site-packages/pyglet/lib.py", line 122, in load_library
raise ImportError('Library "%s" not found.' % names[0])
ImportError: Library "avbin" not found.
Run Code Online (Sandbox Code Playgroud) 这个问题的目标是试图弄清楚如何使用pyglet播放流式音频.第一个是确保你能够使用pyglet播放mp3文件,这就是第一个片段的目的:
import sys
import inspect
import requests
import pyglet
from pyglet.media import *
pyglet.lib.load_library('avbin')
pyglet.have_avbin = True
def url_to_filename(url):
return url.split('/')[-1]
def download_file(url, filename=None):
filename = filename or url_to_filename(url)
with open(filename, "wb") as f:
print("Downloading %s" % filename)
response = requests.get(url, stream=True)
total_length = response.headers.get('content-length')
if total_length is None:
f.write(response.content)
else:
dl = 0
total_length = int(total_length)
for data in response.iter_content(chunk_size=4096):
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * …Run Code Online (Sandbox Code Playgroud) 我正在开发一个显示动画的 python 程序,因此我使用的是 pyglet。到目前为止,我一直在使用 Psychopy 附带的 python 编译器,但现在我需要使这个程序尽可能独立。
我已经用 Windows 机器完成了这个任务,在 OSX 的情况下,我已经按照这篇文章来安装 pyglet。但是,当我现在运行该程序时,它返回:
>>>> python 140603_plaid8.py
2014-06-17 12:25:02.512 Python[1713:d07] ApplePersistenceIgnoreState: Existing state will not be touched. New state will be written to /var/folders/fk/1plt8wj53_d183pv59scmg4m0000gn/T/org.python.python.savedState
no input received
CONFIG FILE LOADED
TRIALS FILE LOADED
2014-06-17 12:25:02.661 Python[1713:d07] -[NSApplication _setup:]: unrecognized selector sent to instance 0x102d3b5c0
2014-06-17 12:25:02.662 Python[1713:d07] An uncaught exception was raised
2014-06-17 12:25:02.663 Python[1713:d07] -[NSApplication _setup:]: unrecognized selector sent to instance 0x102d3b5c0
2014-06-17 12:25:02.663 Python[1713:d07] (
0 …Run Code Online (Sandbox Code Playgroud) 有没有办法用Pyglet制作一个临时的"图像"?(类似于LÖVE的画布).
基本上,我想有一个对象,我可以像sprite和文本一样blit,然后将这个临时图像blit到窗口.
我试着创建一个图像pyglet.image.create(),但显然它采购了一个ImageData你不能盲目的图像.
非常感谢您的关注.
我一直在寻找一种在OpenGL中使用反别名行的方法,但它们似乎都没有用......这里是一些示例代码:
import pyglet
from pyglet.gl import *
window = pyglet.window.Window(resizable=True)
@window.event
def on_draw():
window.clear()
pyglet.gl.glColor4f(1.0,0,0,1.0)
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glEnable (GL_BLEND)
glEnable (GL_LINE_SMOOTH);
glHint (GL_LINE_SMOOTH_HINT, GL_DONT_CARE)
glLineWidth (3)
pyglet.graphics.draw(2, pyglet.gl.GL_LINES,
('v2i', (10, 15, 300, 305))
)
pyglet.app.run()
Run Code Online (Sandbox Code Playgroud)
谁能看到我做错了什么?
pyglet ×10
python ×10
pygame ×3
audio ×2
pyopengl ×2
antialiasing ×1
macos ×1
mp3 ×1
openai-gym ×1
opengl ×1
psychopy ×1
streaming ×1
virtualenv ×1
xvfb ×1