[英]calling virtualenv bundled pip wuth subprocess.call fails on long path to venv directory on Linux
以下行在Linux中引發奇怪的異常(幾個Ubuntu 14.04安裝和一個Arch Linux安裝,其中安裝了所有更新):
subprocess.call(['/home/vestnik/Development/test/python/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/venv/bin/pip','install','httpbin'])
python2.7:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 523, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
python3.5:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/subprocess.py", line 557, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: '/home/vestnik/Development/test/python/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/venv/bin/pip'
我嘗試運行的pip可執行文件是virtualenv引導腳本創建的有效現有文件。 當點的路徑長度大於120個字符時(大約),將出現問題。 如果我刪除路徑中間的一個“ subdir”元素,則一切工作都很好。 此問題的原始來源是jenkins構建由於長工作區名稱而導致virtualenv創建失敗。
子進程模塊中的可執行路徑長度是否有任何限制(我在功能文檔中找不到)還是實現錯誤? 有好的解決方法嗎?
當我嘗試從bash調用venv中的pip時,出現了錯誤的解釋器錯誤。
問題的真正根源是shebang字符串長度限制( 此處接受的答案的注釋聲稱默認限制等於127個字節):
$ head -n1 /home/vestnik/Development/test/python/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/venv/bin/pip
#!/home/vestnik/Development/test/python/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/venv/bin/python3.5
$ head -n1 /home/vestnik/Development/test/python/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/subdir/venv/bin/pip | wc -c
129
問題源不是子流程模塊。 它只會產生混亂的錯誤。
以下代碼有效:
subprocess.call([
'/home/...lonl long venv path.../venv/bin/python3.5',
'/home/...lonl long venv path.../venv/bin/pip',
'install',
'httpbin'
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.