设置适当的python安装脚本

时间:2013-08-26 20:52:30

标签: python python-2.7 setuptools distutils

创建正确的python安装脚本我有一个很大的问题。我的文件夹结构如下所示:

my_project/
    my_project/
        --__init__.py
        --file_1.py
        --file_2.py
        --file_3.py
    -AUTHORS
    -CHANGELOG
    -INSTALL
    -LICENSE
    -README.rst
    -setup.cfg
    -setup.py

我已经创建了一个安装脚本,但它的行为并不像我想要的那样。设置脚本:

from ez_setup import use_setuptools
use_setuptools()
import os
import sys
from setuptools import setup, find_packages
readme_file = os.path.join(os.path.dirname(__file__), 'README.rst')
try:
    long_description = open(readme_file).read()
except IOError, err:
    sys.stderr.write("[ERROR] Cannot find file specified as ""``long_description`` (%s)\n" % readme_file)
    sys.exit(1)
setup(
    name = 'my_project',
    version='0.0.1',
    author = 'AUTHOR',
    author_email = 'CONTACT',
    url = 'http://example.com',
    description= 'Some description',
    long_description = long_description,
    packages = find_packages('my_project'),
    package_dir = {'':'my_project'},
        package_data = {'':['*.py']},
    include_package_data = True,
    scripts = [],
    requires = [],
    license = 'BSD License',
    install_requires = [
        'some_packages',
    ],
    classifiers = [
        'Development Status :: 2 - Pre-Alpha',
        'Environment :: Web Environment',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: BSD License',
        'Operating System :: OS Independent',
        'Programming Language :: Python',
        'Programming Language :: Python :: 2.6',
        'Programming Language :: Python :: 2.7',
        'Topic :: Database',
        'Topic :: Internet',
        'Topic :: Software Development :: Libraries :: Python Modules',
    ],
    keywords = 'python, setup, script, the best',
)

之后:

sudo python setup.py alias release register sdist bdist_egg upload
sudo python setup.py release

到目前为止一切都很好,但是当我尝试时:

sudo pip install my_project

我只在/usr/local/lib/python2.7/dist-packages/中找到一个名为my_project-0.0.1.egg-info /的文件夹,但没有带 init的my_project ,file_1,file_2,file_3 python文件。

我知道my_project-0.0.1.egg-info /是必需的,但我的文件在哪里?

然后我尝试了:

sudo python setup.py install

没有效果,但这次我得到了一个文件夹my_project-0.0.1-py2.7.egg。

我想进入/usr/local/lib/python2.7/dist-packages/两个目录:

- my_project-0.0.1.egg-info/
- my_project with my files

我的问题:

  1. 我做错了什么?
  2. 我该如何解决?
  3. 也许当我尝试使用时 distutils而不是setuptools它可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

你的问题在这一行:

package_dir = {'':'my_project'},

您告诉它my_project是查找顶级软件包的地方。因此,find_packages('my_project')将在my_project处的顶级目录(my_project/my_project)中查找包。由于没有这样的东西,你最终得到一个空包。

只需删除该行,一切都会正常工作。


虽然我们正处于这种状态,但你的内容过于复杂。您没有使用ez_setup以外的任何内容,因此删除前两行会更简单。而你只是添加一个静态包,所以没有理由使用find_packages;你可以改用packages = ['my_project']


与此同时,以下是如何在将来自行调试内容。

首先,在你真正开始工作之前,不要试试sudo python setup.py alias release register sdist bdist_egg upload。调试本地文件要比已经上传到PyPI的内容容易得多。只需执行python setup.py sdist,然后您就可以查看生成的tarball并确保其外观正常,然后尝试pip install .和/或pip install dist/my_project-0.0.1.tar.gz以确保其真正有效。

其次,setup.py只是普通的Python代码;你可以随时记录事情,看看发生了什么。例如,如果find_packages('my_project')似乎无法正常工作,请尝试在print(find_packages('my_project'))之前执行setup(…),看看它在做什么。