<p>看起来你不是自己造的<code>neural_renderer_pytorch</code>,而是用了一个轮子。但是,此控制盘是使用较旧的<code>pytorch</code>版本构建的,不能与计算机上当前的<code>pytorch</code>版本一起使用</p>
<p>使用当前的pytorch版本,即</p>
<pre><code>$ pip uninstall neural-renderer-pytorch
$ pip install https://github.com/daniilidis-group/neural_renderer/zipball/master
</code></pre>
<p>它应该会起作用</p>
<hr/>
<p>在pytorch 1.5之前,它使用了一种在Linux上构建扩展的脆弱方式:尽管依赖于<a href="https://github.com/daniilidis-group/neural_renderer/blob/b2a1e6ce16a54f94f26f86fe1dc3814637e15251/neural_renderer/cuda/create_texture_image_cuda.cpp#L1" rel="nofollow noreferrer">^{<cd6>}</a>,但扩展并没有显式地链接到<code>libtorch.so</code>。提供缺少的符号只是因为<code>import torch</code>用<code>RTLD_GLOBAL</code>加载了<code>libtorch.so</code>,从而使其符号全局可见/可访问-这就是为什么在加载这些扩展之前(例如<code>neural_renderer_pytorch</code>像<a href="https://github.com/daniilidis-group/neural_renderer/blob/b2a1e6ce16a54f94f26f86fe1dc3814637e15251/neural_renderer/load_obj.py#L4" rel="nofollow noreferrer">here</a>),必须导入<code>torch</code>的原因</p>
<p>在第一次导入<code>torch</code>之前,可以强制执行旧的行为设置<code>RTLD_GLOBAL</code>,以进行<strong>导入:</p>
<pre><code>import sys; import ctypes;
sys.setdlopenflags(sys.getdlopenflags() | ctypes.RTLD_GLOBAL)
import torch # now all symbols of torch
# have global visibility and can be used in
# other extensions
</code></pre>
<p>然而,使用<code>RTLD_GLOBAL</code>是相当危险的,因为它可能插入不相关的符号,并导致微妙的错误甚至崩溃</p>
<p>因此,由于1.5 pytorch不再使用<code>RTLD_GLOBAL</code>,而是显式地针对<code>libpytorch.so</code>(参见此<a href="https://github.com/pytorch/pytorch/commit/86148602102e833cc2e04eca9707a53c3287f50c#diff-c0f5058d6a00dd25b52bcc8ba0a8b06dL449" rel="nofollow noreferrer">commit</a>)的链接和使用旧pytorch版本构建的扩展将无法工作</p>