2

( を使用して) ピラミッド プロジェクトを作成しましpcreate -s starter projtestた。デフォルトの構造では、pserve はプロジェクトを期待どおりに実行します。しかし、パッケージ ディレクトリ (たとえば、"skimpygimpy" と呼ばれる)views.pytemplatesディレクトリと同じレベルに追加すると、pserve はプロジェクトを起動できません (invalid command name 'development.ini'エラー)。

projtest/
 |-- CHANGES.txt
 |-- development.ini
 |-- MANIFEST.in
 |-- myproject
 |   |-- __init__.py
 |   |-- skimpygimpy
 |   |   |-- __init__.py
 |   |   |-- file.py
 |   |   |--  ...
 |   |-- static
 |   |   |-- favicon.ico
 |   |   |-- logo.png
 |   |   |-- pylons.css
 |   |-- templates
 |   |   |-- mytemplate.pt
 |   |-- tests.py
 |   |-- views.py
 |-- production.ini
 |-- README.txt
 |-- setup.cfg
 |-- setup.py

では、ピラミッド プロジェクト内にカスタム パッケージを追加し、pserve を呼び出すときにこのエラー (無効なコマンド名 'development.ini') を回避するにはどうすればよいでしょうか?

問題に関する詳細情報:

これらのコマンドを実行しました:

mkdir pyramid
cd pyramid/
virtualenv --no-site-packages env
cd env/
bin/easy_install pyramid
bin/pcreate -s starter projtest
cd projtest
cd projtest
hg clone https://code.google.com/p/skimpygimpy/
cd skimpygimpy
touch __init__.py
cd ..
cd ..
../bin/python setup.py develop
../bin/pserve development.ini

そして、メッセージ: invalid command name 'development.ini'

「skimpygimpy」ディレクトリを削除して再実行すると

../bin/python setup.py develop
../bin/pserve development.ini

大丈夫です。

development.ini ファイル: http://codepad.org/VKPXm0jf

私は何を間違っていますか?何か案は?

4

1 に答える 1

1

それは奇妙なものです。私は今ほとんど空白を描いていますが、推測があります。プロジェクトでskimpygimpyのソースツリー全体をサブパッケージとして複製しているため、config.scan()サブパッケージからすべてのコードをインポートするaのようなものによって、skimpygimpy setup.pyが誤って実行されていると思います。sys.argssetup.py がインポートされると、パラメーターを取得するために使用されるため、悪いことが起こります。これにより、呼び出したように動作する理由が説明されpython setup.py development.iniます。

依存関係は、それらをすべて同じ virtualenv にインストールすることによって見つける必要があります。インタープリターのパスには常に virtualenv 内のものが含まれるため、ファイルシステム上の実際の場所は、これが行われるとほとんど関係ありません。

その結果、サードパーティのプロジェクトはパッケージ内に配置するのではなく、virtualenv にインストールする必要があるため、skimpygimpy をサブパッケージとして配置することはまったく避けるべきだと思います。これは、必要に応じて最上位の projtest フォルダーにクローンを作成することを意味しますが、projtest パッケージ内には作成しません。

setup.py を含まない手動で作成されたパッケージでは、問題は発生しないと確信しています。たとえばmkdir foo; touch foo/__init__.py、問題を示すべきではありません。

于 2013-10-16T18:22:55.483 に答える