4

Django プロジェクトの設定にアクセスする必要がある Fabric タスクがあります。

Windows では、Fabric をプロジェクトの virtualenv にインストールできません (Paramiko + pycrypto deps の問題)。しかし、問題なくシステム全体のサイト パッケージに Fabric をインストールできます。

Django をプロジェクトの virtualenv にインストールしました。「VIRTUALENV\Scripts\activate.bat」スクリプトで virtualenv をアクティブにすると、すべての "> python manage.py" コマンドを簡単に使用できます。

私のプロジェクトには、セットアップ、テスト、展開などのタスクを提供するファブリック タスク ファイル (fabfile.py) があります。私の fabfile の一部のタスクは、「django.conf インポート設定から」を通じて、私の django プロジェクトの設定にアクセスする必要があります。 "。

私が持っている唯一の使用可能な Fabric インストールは、システム全体のサイト パッケージにあるため、fabfile 内で virtualenv をアクティブにして、django を使用できるようにする必要があります。これを行うには、プロジェクトの設定などにアクセスできるようにするために、プロジェクトの virtualenv の「activate_this」モジュールを使用します。activate_this.py を実行する前後に「print sys.path」を使用すると、プロジェクトの virtualenv を指すように Python パスが変更されたことがわかります。ただし、まだdjango.conf.settingsをインポートできません。

*nix (Ubuntu および CentOS) と Cygwin でこれを正常に実行できました。Windows でこのセットアップ/ワークフローを使用しますか? もしそうなら、なぜこれが Windows で動作しないのか、またはこの問題を回避するためのヒントやコツを教えてください。

感謝と乾杯。


参照:

ローカル開発環境:

  • パイソン 2.5.4
  • Virtualenv 1.4.6
  • ファブリック 0.9.0
  • ピップ 0.6.1
  • ジャンゴ 1.1.1
  • Windows XP (SP3)
4

2 に答える 2

6

掘り下げた後、これはactivate_this.pyスクリプトの問題であることがわかりました。現在の状態である virtualenv<=1.4.6 では、このスクリプトは site-packages ディレクトリへのパスがすべてのプラットフォームで同じであることを前提としています。ただし、site-packagesディレクトリへのパスは、*nix のようなプラットフォームと Windows では異なります。

この場合、 activate_this.py スクリプトは *nix スタイル パスを追加します。

VIRTUALENV_BASE/lib/python2.5/site-packages/

Windows 固有のパスではなく、Python パスに移動します。

VIRTUALENV_BASE\Lib\site-packages\

問題と解決策の概要を示す virtualenv issue tracker に問題を作成しました。興味がある場合は、こちらで問題を確認してください: http://bitbucket.org/ianb/virtualenv/issue/31/windows-activate_this-assumes-nix-path-to-site

virtualenv の今後のリリースで修正が利用可能になることを願っています。


今すぐこの問題を修正する必要があり、virtualenv パッケージにまだパッチが適用されていない場合は、以下に示すように独自の activate_this.py を「修正」することができます。

VIRTUALENV\Scripts\activate_this.py ファイルを編集します。行を変更します (17 ?):

site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages')

if sys.platform == 'win32':
    site_packages = os.path.join(base, 'Lib', 'site-packages')
else:
    site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages')

これにより、 activate_this.py スクリプトは、最初に実行されているプラ​​ットフォームを確認し、次に適合するように site-packages ディレクトリへのパスを調整します。

楽しみ!

于 2010-04-20T03:35:23.693 に答える
2

fabファイル内からこれをアクティブ化する必要があります。Altho'私はそれをテストしていません、私は以下がうまくいくはずだと信じています:

activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
于 2010-04-15T08:44:15.233 に答える