2012-02-07 61 views
4

我已经查看了setup.py文档,并且仍然对我觉得应该是非常基本的一些困难。setup.py并安装一个python项目

我已经打破下来到我试图让运行一个简单的示例项目,我的项目的目录布局如下:

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 

任何想法我做错了什么?谢谢!

回答

7

问题是该模块不在sys.path下,这就是import语句找不到的。

在我的情况下,extern模块安装在~/local/lib/python2.7/site-packages/extern下。但是请注意,安装期间安装路径被任意设置为~/local

为了解决这个问题,您可以将PYTHONPATH变量设置为安装该模块的位置或路径添加到sys.pathmain.py

代替

另外,:

setup.py install --prefix ~/local 

使用:

setup.py install --user 

这会在用户的网站包目录(在我的平台~/.local)安装和Python就能找到包不任何问题。但是,您可能需要将环境变量PATH更改为包含~/.local/bin

+0

正如后续,@jcollado,如何安装到python发行版的'site-packages'目录中......会被权限错误阻止吗? – Droogans 2012-02-08 01:04:57

+0

谢谢,我在发布之后遇到了--user选项,但它仍然显得愚蠢,让site.USER_SITE默认为〜/ .local。我应该用一种不同的方式在本地安装东西,或者这只是我应该接受的东西? – 2012-02-08 05:39:31

+0

./setup。py install --home〜/ local 似乎已经工作。 – 2012-02-08 05:50:57