簡體   English   中英

調用virtualenv捆綁的pip wuth subprocess.call在Linux上venv目錄的長路徑上失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM