2016-12-07 37 views
7

問題:如何解決在Windows中執行pvu虛擬字符錯誤的問題?非ASCII字符' x90'在virtualenv中的windows上執行pserve

描述:我試圖在windows上的virtualenv內執行pserve(pyllons/pyramid development web server)。這是全新的安裝,所以它可能與版本有關。

問題:隨着virtualenv激活,執行pserve config.ini拋出錯誤:SyntaxError: Non-ASCII character '\x90' in file C:\PATH_TO_MY_ENV_HOME\env\Scripts\pserve.exe on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

命令行:

pserve development.ini --reload 

注:

  1. 這個錯誤當你有字符的文件不匹配當前文件的編碼發生,所以你可以添加一條指令,用於在python腳本的設置中設置正確的enconde。
  2. 如果被調用的目標在某些情況下具有exe擴展名,並且調用它的腳本將exe添加到最後,它可能會發生。所以,python運行時會拋出這個錯誤,導致一個exe文件不能作爲腳本被調用,而只是被調用而不添加sufix。
  3. 可執行文件的路徑不包含特殊字符。

測試完成:

  1. 取下pserve EXE擴展名。沒有工作:沒有識別的命令信息。
  2. 改爲pserve調用pserve-script.py(完整路徑也試過)。沒有工作:什麼都不做,並且什麼也不返回。
  3. 在pserve-script.py的開頭添加了「 - * - encoding:utf-8」。同樣的信息。
  4. 從python.exe中刪除exe擴展名(完整路徑也試過)。沒有工作:「未能創建過程」。

環境:

  • 的Windows 10 1607構建14393.447
  • Python版本:Anaconda2,巨蟒2.7.11
  • 金字塔版本:1.7.3金字塔
  • 虛擬ENV:15.1 .0

SOLUTION:

卸載並重新安裝再次解決了我的問題。

+1

你忘了問一個問題。 – IInspectable

+1

請包含您用於運行pserve的確切代碼或命令行。這看起來像Python試圖運行.exe,就好像它是一個Python腳本。 – RichVel

+0

@RichVel,在問題中添加。 –

回答

0

而不是encoding我只是使用coding(它似乎不需要-*-)。幾乎每一個Python的腳本我寫的開頭:

#coding: utf-8 

我使用Python 2.7.10在Windows 10

+0

問題是一樣的。 #coding:utf-8也進行了測試。問題不在於腳本,而在於嘗試執行pserve exe。 –

0

我真的不知道答案在這裏,因爲我不使用任何金字塔或視窗。然而,這已經被少數人看到過,並且可能是由於python.exe被用於執行pserve.exe,因爲這不是可執行文件而不是Python程序。

這裏有可能推動這一提出了一些鏈接 - 推薦你加入谷歌集團,因爲它有比較集中的金字塔專長:

一個特定的想法是確保您有一個pserve.py文件不是pserve.exe,並且您使用python pserve.py來運行它。如果調用腳本有限制,請創建一個run-pserve.bat批處理文件來調用Python並在調用腳本之外對其進行測試。

或者,您可能希望在Windows上使用預先配置的Linux VM。或者在Windows 10上有一個很好的'Bash for Windows'(又名Windows Subsystem for Linux),這真的是一個完整的Ubuntu Linux。我認爲這兩種方法都會使開發比Windows更容易。

+0

我已經使用Windows的bash,但我想在Windows上將pycharm或vscode與virtualenv(python實用程序)集成在一起。我也使用WSL來執行我的腳本,但沒有乾淨的方式來與WSL進行集成(遠程鏈接不乾淨,我已經搜索過)。過去也使用過虛擬機,但不是我正在尋找的東西。除此之外,應該真正地在沒有問題的情況下工作。 –

+0

假設'pserve'實際上是一個Python腳本,請嘗試'python pserve development.ini --reload' - 如果這樣做,請將其放入'run-pserve.bat'文件中。要檢查你的virtualenv設置是否正確,你也可以使用'/ path/to/my/venv/bin/python pserve development.ini --reload',即使env vars等不正確,也會強制使用virtualenv。 – RichVel

+0

我也試過完整路徑@RichVel。編輯這個問題來反映這一點。另外,pserve-script。py只是一個叫pserve.exe的包裝器。試圖對這兩個文件(exe和py)進行絕對和相對調用。 –

0

假設你virtualenv坐在venv目錄

使用此:

python venv/Lib/site-packages/pyramid/scripts/pserve.py some-ini-config.ini --reload