1

我有一个巨大的问题来创建正确的 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、 file_1、file_2、file_3 python 文件的 my_project 。

我知道 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 它可以帮助我?
4

1 回答 1

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'))在 the 之前执行 asetup(…)以查看它在做什么。

于 2013-08-26T21:25:21.397 回答