由于 ubuntu 服务器上的 PYTHONPATH 导致使​​用 pip 导入时出错

由于 ubuntu 服务器上的 PYTHONPATH 导致使​​用 pip 导入时出错

我一直在关注教程中指出

$PYTHONPATH 变量似乎随机取消设置,并导致后续步骤出现错误。

然后将以下内容添加到~/.bashrc

export PYTHONPATH='/usr/lib/python2.7:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PILcompat'

我这样做了,然后尝试使用pip install -r requirements.txt

安装所有软件包时,我遇到了很多错误,如下所示这里

我认为这与 PYTHONPATH 的问题有关。为什么我会收到此错误?我可以做些什么才能在使用 python 和 pip 时不出现错误?谢谢。


编辑:

我查看了其他关于在 Ubuntu 上设置 Flask 的教程,没有一个提到要更改PYTHONPATH。我遵循本教程并尝试在虚拟环境中安装软件包,但出现错误。我尝试安装一个名为 python-bcrypt 的软件包,但在终端中出现以下错误:

bcrypt/bcrypt_python.c:17:20: fatal error: Python.h: No such file or directory

 #include "Python.h"

                    ^

compilation terminated.

error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

我尝试安装 pycrypto 并得到相同的结果:

x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -fwrapv -Wall -Wstrict-prototypes -fPIC -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/usr/include/python2.7 -c src/MD2.c -o build/temp.linux-x86_64-2.7/src/MD2.o

src/MD2.c:31:20: fatal error: Python.h: No such file or directory

 #include "Python.h"

                    ^

compilation terminated.

error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

这有什么原因吗?谢谢。

答案1

安装 Python 开发库为我解决了这个问题(从这个答案中发现:https://stackoverflow.com/a/21530768/733547)。

sudo apt-get install python-dev  # for python2.x installs
sudo apt-get install python3-dev  # for python3.x installs

答案2

“随机取消设置”?不。

环境PYTHONPATH变量由进程设置(可能正在运行bash)。如果PYTHONPATHexport,则会将的副本PYTHONPATH传递给由此进程启动的任何进程(或它们启动的任何进程)。

如果某个子进程PYTHONPATH通过以下方式销毁:

unset PYTHONPATH

或者

PYTHONPATH=

那么坏的PYTHONPATH仅对销毁它的进程以及该进程(或其子进程)随后启动的任何进程可见。

最终,随着子进程完成并退出,出现问题的进程PYTHONPATH也将退出,并且其(错误)定义PYTHONPATH也将消失。

启动被破坏的子进程PYTHONPATH将具有 UNdestroyed 定义,并且将始终具有它。

我怀疑“本教程”缺乏对 Linux 的了解,并且可能是危险的。

您的PYTHONPATH包含以下目录:

/usr/lib/python2.7
/usr/lib/python2.7/plat-x86_64-linux-gnu
/usr/lib/python2.7/lib-tk
/usr/lib/python2.7/lib-old
/usr/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages/PILcompat

对于 $PYTHONPATH 中的每个目录,问自己以下问题:

它是否存在于我的系统中?权限是否表明我可以访问它?

/bin/ls -ld $(echo "$PYTHONPATH" | tr ":" " ")  

我可以访问目录内的文件吗?

/bin/ls -l $(echo "$PYTHONPATH" | tr ":" " ")

该目录是否包含 Python 或 Python 程序或任何您想要运行所需的文件,并通过 访问$PYTHONPATH

查看第一个错误(不是警告,不是信息,而是“错误”)消息,我们会看到:

  Running setup.py (path:/tmp/pip_build_ubuntu/MySQL-python/setup.py) egg_info for package MySQL-python
    sh: 1: mysql_config: not found

搜索手册页对于msql_config产品:

trusty (1) mysql_config.1.gz
Provided by: libmariadbclient-dev_5.5.36-1_i386 

NAME
       mysql_config - get compile options for compiling clients

SYNOPSIS
       mysql_config options

DESCRIPTION
       mysql_config provides you with useful information for compiling your
       MySQL client and connecting it to MySQL.

这意味着您尚未成功安装和配置MySQLMySQL client,并且“本教程”试图让您执行的任何操作都需要MySQL

相关内容