步骤一, 先找出你的成功路径例子:
[ack0hole
@localhost tmp]$ py278 -sE #这是我的例子,你的是 Python 3.4.0 交互模式
Python 2.7.8 (default, Sep 2 2014, 23:14:58)
[GCC 4.8.3 20140624 (Red Hat 4.8.3-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tornado.httpserver
>>> tornado.httpserver.__file__
*/usr/lib/python2.7/site-packages/tornado/httpserver.pyc*
>>>
步骤二, 然后在你的 hello.py 输入代码:
[ack0hole@localhost tmp]$ cat hello.py
import sys;
print(sys.path)
import tornado.httpserver
print locals()
[ack0hole@localhost tmp]$ python hello.py #这是我的例子,你的是 sudo python hello.py
[*/tmp*, */usr/local/lib/python27.zip*, */usr/local/lib/python2.7*, */usr/local/lib/python2.7/plat-linux2*, */usr/local/lib/python2.7/lib-tk*, */usr/local/lib/python2.7/lib-old*, */usr/local/lib/python2.7/lib-dynload*, */home/ack0hole/.local/lib/python2.7/site-packages*, */usr/local/lib/python2.7/site-packages*]
Traceback (most recent call last):
File "hello.py", line 3, in <module>
import tornado.httpserver
ImportError: No module named tornado.httpserver
[ack0hole@localhost tmp]$
上面的步骤一,*/usr/lib/python2.7/site-packages/tornado/httpserver.pyc* 表示 httpserver.pyc 是坐落在 */usr/lib/python2.7/site-packages/tornado/* 目录里头, 可是步骤二 的 sys.path 却不包括 */usr/lib/python2.7/site-packages/* 那个目录。
所以,
1. 步骤二的 sys.path 输出 site-packages 的例子是 /usr/local/lib/python2.7/site-packages 之类的。
2. 那我们的目标就是在 /usr/local/lib/python2.7/site-packages 创建新的文件叫 tornado.pth 。 其中 .pth 后缀是必须的。
3. 创建的文件内容是步骤一所获知的 tornado 绝对路径目录: /usr/lib/python2.7/site-packages/
创建新的文件示范:
[ack0hole@localhost tmp]$ sudo sh -c "echo */usr/lib/python2.7/site-packages/* > /usr/local/lib/python2.7/site-packages/tornado.pth" #请把星号换成单引号
再一次运行 hello.py:
[ack0hole@localhost tmp]$ python hello.py #这是我的例子,你的是 sudo python hello.py
[*/tmp*, */usr/local/lib/python27.zip*, */usr/local/lib/python2.7*, */usr/local/lib/python2.7/plat-linux2*, */usr/local/lib/python2.7/lib-tk*, */usr/local/lib/python2.7/lib-old*, */usr/local/lib/python2.7/lib-dynload*, */home/ack0hole/.local/lib/python2.7/site-packages*, */usr/local/lib/python2.7/site-packages*, */usr/lib/python2.7/site-packages*]
{*__builtins__*: <module *__builtin__* (built-in)>, *__file__*: *hello.py*, *__package__*: None, *sys*: <module *sys* (built-in)>, *tornado*: <module *tornado* from */usr/lib/python2.7/site-packages/tornado/__init__.pyc*>, *__name__*: *__main__*, *__doc__*: None}
[ack0hole@localhost tmp]$
如上所示, 成功 import */usr/lib/python2.7/site-packages/tornado/__init__.pyc*。

bonus:

如果你不想整个 /usr/lib/python2.7/site-packages 被加入 path, 可以在 /usr/lib/python2.7/site-packages/ 里头, 把现有的 tornado 目录放在新建的 tornado 目录。
[ack0hole@localhost site-packages]$ cd /tmp
[ack0hole@localhost tmp]$ cd /usr/lib/python2.7/site-packages/
[ack0hole@localhost site-packages]$ sudo mkdir tornado2 #先新建暂时的目录, 叫 tornado2
[ack0hole@localhost site-packages]$ sudo mv tornado tornado2/ #把现有的 tornado 目录放在新建的 tornado2 目录。
[ack0hole@localhost site-packages]$ sudo mv tornado2 tornado #把 tornado2 目录改名为 tornado 目录
[ack0hole@localhost site-packages]$ sudo sh -c "echo */usr/lib/python2.7/site-packages/tornado* > /usr/local/lib/python2.7/site-packages/tornado.pth" #然后不再加入整个 site-packages, 而是 tornado 一个。 #请把星号换成单引号
[ack0hole@localhost site-packages]$ cat /usr/local/lib/python2.7/site-packages/tornado.pth
/usr/lib/python2.7/site-packages/tornado
[ack0hole@localhost site-packages]$ cd /tmp
[ack0hole@localhost tmp]$ python hello.py #仍然成功
[*/tmp*, */usr/local/lib/python27.zip*, */usr/local/lib/python2.7*, */usr/local/lib/python2.7/plat-linux2*, */usr/local/lib/python2.7/lib-tk*, */usr/local/lib/python2.7/lib-old*, */usr/local/lib/python2.7/lib-dynload*, */home/ack0hole/.local/lib/python2.7/site-packages*, */usr/local/lib/python2.7/site-packages*, */usr/lib/python2.7/site-packages/tornado*]
{*__builtins__*: <module *__builtin__* (built-in)>, *__file__*: *hello.py*, *__package__*: None, *sys*: <module *sys* (built-in)>, *tornado*: <module *tornado* from */usr/lib/python2.7/site-packages/tornado/tornado/__init__.pyc*>, *__name__*: *__main__*, *__doc__*: None}
[ack0hole@localhost tmp]$
#bonus2:

上面的例子都是 tornado 版本 2。 如果是新版本 4, tornado 目录是在 .egg 目录里头的,这样就省却 "把现有的 tornado 目录放在新建的 tornado 目录" 的步骤。
[ack0hole@localhost tornado]$ py278 -c "import tornado"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named tornado
[ack0hole@localhost tornado]$ echo /usr/lib/python2.7/site-packages/tornado-4.0.2-py2.7-linux-i686.egg/ > /home/ack0hole/.local/lib/python2.7/site-packages/tornado4.0.2.pth
[ack0hole@localhost tornado]$ cat /home/ack0hole/.local/lib/python2.7/site-packages/tornado4.0.2.pth
/usr/lib/python2.7/site-packages/tornado-4.0.2-py2.7-linux-i686.egg/
[ack0hole@localhost tornado]$ py278 -c "import tornado"
[ack0hole@localhost tornado]$