7

我正在使用 djangoflup+fastgic+ngix。它运作良好。

现在我打算从 python 2.6.6 升级到 2.7.2,在 python 2.7 中导入 Flup 时遇到了问题。

Python 2.7.2 (Red Hat 4.1.2-50)
>>> import sys
>>> sys.path
['', '......', 
'/usr/local/lib/python2.7.2/lib/python2.7/site-packages/flup-1.0.2-py2.7.egg', '......']
>>> import flup
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named flup

它在 python 2.6 下的 SAME 主机上完美运行。

Python 2.6.6 (Red Hat 4.1.2-50)
>>> import sys
>>> sys.path
['', '......', '/usr/local/lib/python2.6/site-packages/flup-1.0.1-py2.6.egg', '......']
>>> import flup
>>>

关于原因的任何想法?

4

4 回答 4

11

较新版本的 Flup 放弃了对 python2.7 的支持(不小心?)

您可以安装一个较旧的适用于:

pip install flup==1.0.3.dev-20110405
于 2017-06-20T20:56:34.513 回答
3

问题在于导入线程功能的变化。Flup 的最新版本(截至撰写本文时)是 1.0.3,可以使用以下补丁修复:

diff -puNr flup-1.0.3/lib/python2.7/site-packages/flup/server/fcgi_base.py flup-1.0.3.fixed/lib/python2.7/site-packages/flup/server/fcgi_base.py
--- flup-1.0.3/lib/python2.7/site-packages/flup/server/fcgi_base.py 2019-02-03 23:13:24.305329000 +0000
+++ flup-1.0.3.fixed/lib/python2.7/site-packages/flup/server/fcgi_base.py   2019-02-03 23:12:12.319327934 +0000
@@ -38,11 +38,14 @@ import errno
 import traceback

 try:
-    import _thread
+    try:
+        import _thread
+    except ImportError:
+        import thread as _thread
     import threading
     thread_available = True
 except ImportError:
-    import _dummy_thread as thread
+    import _dummy_thread as _thread
     import dummy_threading as threading
     thread_available = False

上面,我保留了原来的行为(先导入_thread),然后它会回退到将线程导入为_thread。我还修复了后备选项,因为引入更改的人忘记修复后备选项。

鉴于 RHEL/CentOS 7 仍在运行 Python 2.7,此修复将需要一段时间。不幸的是,我没有找到 Flup 的当前主页,以便能够将这个修复推送到上游。

于 2019-02-03T23:29:28.700 回答
0

/usr/local/lib/python2.7.2/lib/python2.7/site-packages/flup-1.0.2-py2.7.egg的驱动器上真的存在吗?事实上,如果 path 没有指向任何东西,那么 flup 模块就找不到了;在这种情况下,您应该(重新)安装它。

于 2011-12-21T13:22:11.427 回答
0

我通过将 python-config 文件链接到$PATH

ln -s /usr/local/lib/python2.7.2/bin/python-config /usr/local/bin/python-config
于 2011-12-22T11:02:10.470 回答