จะใช้ไพ ธ อน virtualv กับ sudo ได้อย่างไร?


47

ฉันกำลังพยายามสร้างสภาพแวดล้อมแบบหลามแยกจากระบบหนึ่ง (โดยใช้ virtualenv) ในไดเรกทอรีที่ไม่ได้อยู่ภายใต้ / home เพราะฉันจำเป็นต้องใช้มันเพื่อสร้างซอฟต์แวร์อื่น ๆ ที่ผู้ใช้หลายคนสามารถเข้าถึงได้ ฉันสามารถสร้างและเปิดใช้งาน virtualenv ได้ทุกอย่าง แต่เมื่อฉันsudoมีคำสั่งบางอย่าง (เช่นเพื่อสร้างหรือรวบรวมซอฟต์แวร์อื่น ๆ ) มันเป็นงูหลามระบบที่ใช้ (ฉันสามารถบอกได้เพราะโมดูลที่มีอยู่)

ตั้งแต่บน Ubuntu มันไม่ได้เป็นสิ่งที่ดีที่จะใช้ผู้ใช้รูทมีวิธีบอกsudoให้ใช้ virtualenv หรือไม่? หรือบางทีนี่อาจไม่ใช่วิธีที่ถูกต้องและฉันควรทำการติดตั้งไพ ธ อนใหม่ทั้งหมดหรือไม่

ฉันใช้ Ubuntu รุ่น 12 บิต 64 บิต (และ python 2.7)


1
ทำงานต่อไปนี้หรือไม่ sudo $ (ไพ ธ อน) <script>
John Drinane

คำตอบ:


57

ปัญหาเกือบแน่นอนว่าเมื่อคุณเรียกใช้sudoตัวแปรสภาพแวดล้อม virtualenv ชื่อแทนฟังก์ชันและอื่น ๆ จะไม่ถูกนำไปใช้

sudoการแก้ปัญหาจะทำงานสภาพแวดล้อมเสมือนงูหลามปฏิบัติการอย่างชัดเจนด้วย ตัวอย่างเช่นหาก virtualenv ของคุณคือ. / AwesomeProject คุณสามารถเรียกsudo ./AwesomeProject/bin/python <script>ใช้สคริปต์ด้วย virtualenv ที่มีสิทธิ์ใช้งานรูต


3
คุณสามารถปล่อยให้บรรทัดแรกของสคริปต์ชี้ไปที่ Python binary ใน virtualenv ของคุณ #!<virtualenv_dir>/bin/python.
OrangeTux

น่ารำคาญว่านี่เป็นวิธีแก้ปัญหาเท่านั้น บน Mac sudo python ใช้ python จาก env เสมือน
gaefan

4

เพิ่งสะดุดกับเรื่องนี้และสำหรับคนอื่น ๆ ที่อาจพบปัญหาเดียวกันเคนก็ถูกต้องว่าตัวแปร env ไม่ได้ถูกนำไปใช้ โซลูชันที่ฉันใช้คือเพิ่มบรรทัดต่อไปนี้ในสคริปต์ของฉัน สิ่งนี้มีประโยชน์เพิ่มเติมของการโหลดสภาพแวดล้อมเสมือนโดยตรงจากสคริปต์เสมอ (หมายความว่าคุณสามารถใช้สคริปต์กับ crontab หรือ launchd โดยไม่มีวิธีแก้ไขอื่น ๆ )

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))

พื้นหลังเพิ่มเติมได้ที่นี่: https://virtualenv.pypa.io/en/latest/userguide.html#using-virtualenv-without-bin-python


4

บางครั้งคุณต้องการ $ PATH ที่อัปเดตเนื่องจากสคริปต์รันโปรแกรมอื่น ตัวอย่างเช่น pypi-install ต้องการ py2dsc-deb ใน PATH คำสั่งนี้ใช้งานได้:sudo sh -c ". venv/bin/activate ; pypi-install $PACKAGE"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.