setup.py并安装python项目

setup.py并安装python项目,python,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.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"],
      )
#! /usr/bin/env python
import extern.mytest as mytest

mytest.print_test()
#!/usr/bin/env python
def print_test():
    print "YAY"
myproject/src/main.py:

#!/usr/bin/env python
from distutils.core import setup

setup(name = "myproject",
      package_dir = {'':"src"},
      packages = ["extern"],
      scripts = ["src/main.py"],
      )
#! /usr/bin/env python
import extern.mytest as mytest

mytest.print_test()
#!/usr/bin/env python
def print_test():
    print "YAY"
myproject/src/extern/mytest.py:

#!/usr/bin/env python
from distutils.core import setup

setup(name = "myproject",
      package_dir = {'':"src"},
      packages = ["extern"],
      scripts = ["src/main.py"],
      )
#! /usr/bin/env python
import extern.mytest as mytest

mytest.print_test()
#!/usr/bin/env python
def print_test():
    print "YAY"
myproject/src/extern/\u init\uuy.py为空。

我正在以以下方式运行setup.py:

setup.py install --prefix ~/local
setup.py将在没有错误的情况下完成,并将main.py移动到~/local/bin,但是当我运行它时,会出现以下错误:

ImportError: No module named extern.mytest

知道我做错了什么吗?谢谢

问题在于模块不在
sys.path
下,因此
import
语句无法找到该模块

在我的例子中,
extern
模块安装在
~/local/lib/python2.7/site packages/extern
下。但是,请注意,在安装过程中,安装路径被任意设置为
~/local

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

或者,代替:

setup.py install --prefix ~/local
使用:


这将安装在您的用户站点软件包目录中(
~/.local
,在我的平台中),python将能够毫无问题地找到该软件包。但是,您可能需要更改您的
路径
环境变量以包含
~/.local/bin

,作为后续操作,@jcollado,安装到python发行版的
站点包
目录中……会被权限错误阻止吗?谢谢,我在发布后遇到了--user选项,但将site.user_site默认值设置为~/.local似乎仍然很愚蠢。我应该用另一种方式在本地安装东西,还是这只是我应该接受的?@Droogans如果你指的是像
/usr/local/lib/python2.x/site packages
,是的,那需要
root
权限。@Geoff这很奇怪,我已经尝试过了,它将模块文件安装在
~/local/lib/python/
下,而该文件不在我的python路径中。@Weboide感谢您的拼写修复。