设置WSGI应用程序时出现PCRE问题

时间:2017-04-08 23:16:00

标签: linux shared-libraries uwsgi pcre

[上下文注意:我对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例子中提到的事情。

任何见解或指导都会非常感激(抱歉,如果太模糊!)

1 个答案:

答案 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