setup.py与安装Python项目
我查看了setup.py的文档,但还是遇到了一些我觉得应该很简单的问题。
我把这个问题简化成一个简单的示例项目,我的项目目录结构如下:
myproject
setup.py
src\
main.py
extern\
__init__.py
mytest.py
myproject/setup.py:
#!/usr/bin/env python
from distutils.core import setup
setup(name = "myproject",
package_dir = {'':"src"},
packages = ["extern"],
scripts = ["src/main.py"],
)
myproject/src/main.py:
#! /usr/bin/env python
import extern.mytest as mytest
mytest.print_test()
myproject/src/extern/mytest.py:
#!/usr/bin/env python
def print_test():
print "YAY"
myproject/src/extern/_init_.py是空的。
我运行setup.py的方式是:
setup.py install --prefix ~/local
setup.py运行完没有错误,并把main.py移动到了~/local/bin,但当我运行它时却出现了以下错误:
ImportError: No module named extern.mytest
你知道我哪里出错了吗?谢谢!
1 个回答
9
问题在于这个模块不在 sys.path
里面,所以用 import
语句时找不到它。
在我的情况下,extern
模块安装在 ~/local/lib/python2.7/site-packages/extern
这个地方。不过,要注意的是,安装路径在安装时是随便设置成 ~/local
的。
要解决这个问题,你可以把 PYTHONPATH
变量设置成模块安装的地方,或者在 main.py
里把这个路径加到 sys.path
里面。
另外,不要用:
setup.py install --prefix ~/local
而是用:
setup.py install --user
这样做会把模块安装到你的用户站点包目录里(在我的系统上是 ~/.local
),这样 Python 就能顺利找到这个包了。不过,你可能还需要把你的 PATH
环境变量改一下,加入 ~/.local/bin
。