Python setup.py脚本无法正确安装模块

时间:2014-11-20 03:10:03

标签: python setup.py

回购地点:https://github.com/willkara/SakaiPy

所以我有这个python modudle我正在创建。它目前有这种结构:

SakaiPy
├── SakaiPy
│   ├── __init__.py #1
│   └── RequestGenerator.py
├── SakaiTools
    ├── __init__.py #2
    ├── Assignment.py
    ├── Announcement.py
    └── ...etc.py
└── setup.py

init .py#1看起来像:

__all__=['SakaiTools']
from SakaiTools import *

init .py#2为空

我的setup.py看起来像:

  version='1.0',
  description='Python interface to the Sakai RESTful API\'s',
  license='MIT',
  author='William Karavites',
  author_email='wkaravites@gmail.com',
  url='https://github.com/willkara/SakaiPy',
  packages=['SakaiPy','SakaiPy/SakaiTools'],
  requires={
            "mechanize",
            "cookielib",
            "requests",
            "simplejson"}
 )

我的问题是该模块似乎构建不正确。

当我尝试使用这样的模块时:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from SakaiPy import *

print "hello"

authInfo={}
authInfo['baseURL'] =""
authInfo['loginURL']=""
authInfo['username']=""
authInfo['password']=""

rq = RequestGenerator.RequestGenerator(authInfo)

我收到此错误:

Traceback (most recent call last):
  File "../sakaiTest.py", line 14, in <module>
    rq = RequestGenerator.RequestGenerator(authInfo)
NameError: name 'RequestGenerator' is not defined

我的猜测是我的setup.py和 init .py脚本设置不正确。

1 个答案:

答案 0 :(得分:2)

您将要更改目录结构,因为您现在技术上有两个Python模块,并且您给setuptools一个错误的包路径。为了获得您正在寻找的路径,您需要将SakaiTools目录嵌套在SakaiPy目录中。有了这个,您应该能够拥有您正在寻找的导入,并且您可以像{I} SakaiTools一样导入SakiPy.SakaiTools

SakaiPy
├── SakaiPy
│   ├── __init__.py # make this blank
│   ├── RequestGenerator.py
│   └── SakaiTools
│       ├── __init__.py # keep it blank
│       ├── Assignment.py
│       ├── Announcement.py
│       └── ...etc.py
└── setup.py

这将为您提供一个模块SakaiTools作为子模块,这听起来像您正在寻找的。您将需要从第一个SakaiTools中提取__init__.py个导入,因为您可以使用此设置轻松访问这些导入。


如果您希望保留两个不同的模块,则需要告诉setuptools您有两个不同的模块。

version='1.0',
description='Python interface to the Sakai RESTful API\'s',
license='MIT',
author='William Karavites',
author_email='wkaravites@gmail.com',
url='https://github.com/willkara/SakaiPy',
packages=['SakaiPy','SakaiTools'],
requires=(
    "mechanize",
    "cookielib",
    "requests",
    "simplejson",
)