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/ 2 つのディレクトリに移動したい:

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

私の質問:

  1. 私は何を間違っていますか?
  2. どうすれば解決できますか?
  3. setuptools の代わりに distutils を使おうとすると、うまくいくでしょうか?
4

1 に答える 1

1

あなたの問題はこの行にあります:

package_dir = {'':'my_project'},

my_projectトップレベルのパッケージを見つける場所であることを伝えています。では、最上位ディレクトリ ( )find_packages('my_project')内のパッケージを探します。そんなことないから空っぽになってしまう。my_projectmy_project/my_project

その行を削除するだけで、すべてが機能します。


私たちがそれに取り組んでいる間、あなたは物事を少し複雑にしすぎています. から何も使用していないez_setupため、最初の 2 行を削除する方が簡単です。そして、単一の静的パッケージを追加しているだけなので、実際に使用する理由はありません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実際に動作することを確認できます。

2 つ目setup.pyは、通常の Python コードです。いつでもログに記録して、何が起こっているかを確認できます。たとえば、find_packages('my_project')が正しく機能していないように思われる場合は、 のprint(find_packages('my_project'))前にa を実行して、その動作setup(…)を確認してください。

于 2013-08-26T21:25:21.397 に答える