Sudo ile bir python virtualenv nasıl kullanılır?


47

Bir python ortamını sistemden ayrı (sanalenv kullanarak) dizinde / home altında olmayan bir dizinde yapmaya çalışıyorum çünkü birden fazla kullanıcının erişebileceği başka bir yazılımı kurmak için kullanmam gerekiyor. Virtualenv'i oluşturabilir ve etkinleştirebilirim, ancak sudobazı komutlar (örneğin başka bir yazılım yapmak veya derlemek için), kullanılan sistem python'dur (mevcut modüller nedeniyle söyleyebilirim).

Ubuntu'da root kullanıcısını kullanmak iyi bir şey olmadığından , sudobir sanalenv kullanmak için söylemenin bir yolu var mı? Ya da belki bu doğru yaklaşım değildir ve tamamen yeni bir python kurulumu yapmalı mıyım?

Ubuntu 12.04'ün 64bit sürümünü kullanıyorum (ve python 2.7).


1
Aşağıdaki çalışıyor mu? sudo $ (hangi python) <script>
John Drinane

Yanıtlar:


57

Sorun neredeyse kesin olarak, çalıştırdığınızda sudo, sanal ortam ortamı değişkenlerinin, takma adların, işlevlerin, vb. Taşınmamasıdır.

Çözüm, açıkça sanal ortamın çalıştırılabilir Python'u ile çalıştırmak olacaktır sudo. Örneğin, sanalenviniz ./AwesomeProject ise, betiği sanalenv sudo ./AwesomeProject/bin/python <script>ile root haklarıyla kullanmak için koşabilirsiniz .


3
Komut dosyanızın ilk satırının virtualenv'nizdeki Python binary'ini göstermesine de izin verebilirsiniz. #!<virtualenv_dir>/bin/python.
OrangeTux

Ugh, bu şimdiye kadar sadece çözüm olduğunu can sıkıcı. Mac'te sudo python, sanal ortamdan python kullanır.
gaefan

4

Sadece bu konuda tökezledi ve aynı konuyu bulabilir diğerleri için, Ken env değişkenleri taşınmadığı doğrudur. Kullandığım çözüm betiğime aşağıdaki satırları eklemek oldu. Bu, sanal ortamı her zaman doğrudan komut dosyasından yüklemek için ek bir yarar sağlar. (Yani betiği crontab ile kullanabilir veya başka herhangi bir geçici çözüm olmadan çalıştırmayı başlatabilirsiniz.)

base_dir = os.path.dirname(os.path.abspath(__file__))
activate_this = os.path.join(base_dir, 'venv/bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))

Burada daha fazla arka plan: https://virtualenv.pypa.io/en/latest/userguide.html#using-virtualenv-without-bin-python


4

Bazen betiğin diğer programları çalıştırmasından dolayı $ PATH'ın güncellenmesi gerekebilir. Örneğin, pypi kurulumunun PATH içindeki py2dsc-deb'e ihtiyacı var. Bu komut çalışıyor:sudo sh -c ". venv/bin/activate ; pypi-install $PACKAGE"

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.