2017-01-14 5 views
1

私はpipを修正しようとしていますので、それぞれのインストールまたはアンインストール後に私のrequirements.txtが更新されるでしょう。virtualenvでpipを変更するには?

これを行うには、pipファイルをbin/ my virtual envに変更しました。

pip

#!/Users/username/ProjectEnv/bin/python3 

# -*- coding: utf-8 -*- 
import re 
import sys 

from pip import main 

if __name__ == '__main__': 
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) 
    status = main() 
    if status == 0 or status is None: 
     sys.argv = ['pip', 'freeze', '>', '../Project/requirements.txt'] 
     sys.exit(main()) 

これは動作しませんでした。私はコマンドライン引数を表示してブレークポイントを設定しようとしましたが、うまく機能しませんでした。

pip

#!/Users/username/ProjectEnv/bin/python3 

# -*- coding: utf-8 -*- 
import re 
import sys 
import pdb 
pdb.set_trace() 

from pip import main 

if __name__ == '__main__': 
    for arg in sys.argv: 
     print(arg) 
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) 
    status = main() 
    if status == 0 or status is None: 
     sys.argv = ['pip', 'freeze', '>', '../Project/requirements.txt'] 
     sys.exit(main()) 

は、私がここで間違って何をしているのですか?

+0

'status == 0'と' status is None'を意味するのではなく、 '='だけではないですか?ペーストした構文を使用した場合、有効なpy2コードでもpy3コードでもないので、コードはまったく呼び出されていないと思います。 – MatsLindh

+0

@MatsLindh修正済みですが、まだ動作していません。 – Utku

答えて

1

あなたはfreezeメソッドをpipライブラリで自分で呼び出すことができます。これは、pip --freezeの画面に何が出力されるかを1行ずつ出力するジェネレータを返します。

from pip.operations import freeze 

packages = freeze.freeze() 
with open('../Project/requirements.txt', 'w') as f: 
    for x in packages: 
     f.write(x) 
     f.write('\n') 
+0

私のためには機能しません。あなたはそれを試しましたか? – Utku

+0

freeze.freezeのコードです。 – 2ps

+0

virtualenvがアクティブな状態でテストしましたか?私のようにはうまくいかないから。 – Utku

0

問題は、間違ったファイルを修正していたことでした。 をProjectEnv/bin/に変更しましたが、入力したときに実行されたファイルではありません。たとえば、pip install some_moduleです。

which pipには/Users/username/ProjectEnv/bin/pipが出力されているため、これを検出するまでに時間がかかりました。

type pipが真実を示しています。それは出力した:pip is aliased to 'pip3'

これは、なぜwhichからtypeにエイリアスする必要があるかの良い例です。または、なぜwhichの使用をやめて、いつもtypeを使用する必要があります。

0

私はあなたがpip_with_autofreeze.shのようなbashスクリプトを持つ方が良いと思います。たとえば、./pip_with_autofreeze.sh install flask

#!/usr/bin/env sh 
pip [email protected] && pip freeze > requirements.txt 

が実行それを。

$PATHのような適切な場所にスクリプトを配置してください。~/binのように、今後作成するvirtualenvから呼び出すことができます。 Pipはvirtualenvが指しているものを参照します。

関連する問題