[上下文注意:我对linux是全新的,我正在尝试通过在线指南学习,所以我对如何拍摄问题的理解非常有限]
我正在使用Ubuntu 16.04.2 LTS。
我一直在关注指南 How To Set Up uWSGI and Nginx to Serve Python Apps on Ubuntu 14.04。一旦我设置了virtualenv,我就按照说明操作:
pip install uwsgi
您可以输入以下命令验证它现在是否可用:
uwsgi --version
如果它返回版本号,则可以使用uWSGI服务器。
然而,当我这样做时,我得到:
uwsgi:加载共享库时出错:libpcre.so.1:无法打开共享对象文件:没有这样的文件或目录
如果我继续推进并进一步完成指南,当我尝试使用uwsgi时会出现问题。
我的研究告诉我,PCRE是Perl兼容的正则表达式,有几个人在线询问libpcre.so.1与其他应用程序有关的问题。
例如对similar issue relating to nginx的回复:
该消息意味着它所说的内容。 nginx可执行文件被编译为 期待PCRE(Perl兼容的正则表达式)共享库 可以在LD_LIBRARY_PATH上的某个位置使用或在 /etc/ld.so.conf或任何等效的库定位机制 适用于您的操作系统,但找不到该库。
您需要安装PCRE - 或者配置您的环境 nginx将查找安装它的PCRE库。
但我发现与安装PCRE或配置它有很多相关性。大多数安装说明使用:apt-get install libpcre3 libpcre3-dev
,然后重新安装uwsgi pip install uwsgi -I
。与此example一样。我已经尝试了所有贴出来的地方,无处可去。
我认为我的主要问题是我不能很好地理解这个问题,或者如何处理上面nginx例子中提到的事情。
任何见解或指导都会非常感激(抱歉,如果太模糊!)
答案 0 :(得分:5)
即使我的上下文可能有所不同,以下步骤也可以为您提供帮助。
我在pip install uwsgi
创建的环境中conda create -yn <env_name> python
。请注意,甚至不需要将PCRE安装到环境中,因为它包含在Anaconda
中。我们可以在source activate <env_name>
之后在环境中看到此问题:
# uwsgi --version
uwsgi: error while loading shared libraries: libpcre.so.1: cannot open...
使用root / sudo访问权限,您可以找到libpcre.so.1
所在的位置:
# find / -name libpcre.so.1
/opt/anaconda3/lib/libpcre.so.1
现在让Linux知道如何访问它:
# ldconfig /opt/anaconda3/lib/
这就是让你发挥作用所需要的一切。您可以看到正在进行的更改:
# find / -name uwsgi
/opt/anaconda3/envs/<env_name>/bin/uwsgi
# ldd -d /opt/anaconda3/envs/<env_name>/bin/uwsgi
linux-vdso.so.1 => (0x00007fff2d1ba000)
...
/lib64/ld-linux-x86-64.so.2 (0x00007ff98dbc5000)
undefined symbol: pcre_free (/opt/anaconda3/envs/cts/bin/uwsgi)
PS 结果ldconfig
填充全局缓存/etc/ld.so.cache
,在我的情况下,与系统库(/lib/x86_64-linux-gnu/libdbus-1.so.3
)发生冲突。因此,我必须通过运行不带参数的ldconfig
来恢复更改,并使用运行时链接=启动uwsgi
作为
# LD_LIBRARY_PATH=/opt/anaconda3/lib uwsgi --version