2017-06-26 35 views
1

我在執行Hiero的自定義Python代碼時遇到了一個小問題。大家都知道,首先要查找的細節是官方文檔「Nukepedia」,Python開發指南和Hiero用戶指南。那麼根據Python開發指南,Hiero默認會創建一個「.hiero」目錄,讓人們可以添加插件路徑在軟件中使用它們。好吧,我找不到那個目錄,經過幾次測試,我推斷Hiero使用保存在「.nuke」目錄中的init.py。在Hiero中運行Python插件

所以我想也許我可以在那裏添加插件路徑,但不斷得到着名的_fnpython模塊導入錯誤(在創建Python /啓動目錄之前)。

我在.nuke中添加了Python/Startup文件夾,並且在啓動時添加了插件,我得到了同樣的錯誤,我甚至嘗試在init.py中添加插件的路徑並獲得相同的錯誤。然後我創建了一個「.hiero」文件夾並且做了和以前一樣的事情,但是Hiero從來沒有考慮過這個文件夾,我推斷出通過在控制檯中打印一些字符串,Hiero總是把init.py保存在「.nuke」文件夾並保持顯示相同的錯誤。

最後,我試圖查看安裝過程,並試圖分開Nuke和Hiero的文件夾,也許這將創建「.hiero」目錄,但一切都是自動的。

我想運行的代碼由Nuke和Hiero(在示例目錄中)給出,我只是無法弄清楚爲了從程序中運行它該怎麼做。

我應該怎麼做才能解決這個問題?

預先感謝您。

+0

嗨,馬克,你解決了你的問題嗎? – andy

+0

不行,仍然不能執行Hiero的代碼... – Marc

+0

上次我們討論這個問題時,你消失了)))讓我們繼續討論。 – andy

回答

1

The Foundry HIERO的設置與NUKE有點不同。

HIERO有一個core模塊。你會看到它在__init__.py文件:

import FnRedirect 
import FnPythonFixes 
import core 
import ui 

try: 
    if hasattr(core, "taskRegistry"): 
    import importers 
    import exporters 
except ImportError as e: 
    pass 

我在Mac上運行HIERO和NUKE STUDIO,所以有一個完整路徑HIERO的__init__.py文件包裏面的內容:

/應用/ Nuke10。 5V5 /內容/ Mac系統/ pythonextensions /站點包/ hiero/__init__.py

則需要使用導入這個模塊:

import hiero.core 

或使用該core包的引用:

from core import * 

要找到HIERO的電流路徑,你必須在腳本編輯器中運行該行:

print hiero.core.pluginPath() 

點擊此鏈接瞭解更多詳情:Hiero's Environment Setup

所有這些說明適用於macOS 10.9及以上版本。這裏有兩個步驟塊:第一個是終端模式,第二個是UI模式。

BLOCK 1:setup for Terminal Sessions

你需要在你的Home區手動創建.hiero目錄。

上啓動時運行的Python推薦的默認位置是:

〜/ .hiero/Python的/啓動

〜/ .hiero/Python的/ StartupUI

輸入您的bash終端(當您在Home用戶目錄中時)以下行:

mkdir .hiero/ 

則:

mkdir .hiero/Python/ 

然後:

mkdir .hiero/Python/StartupUI/ 

然後導航到Home目錄中:

cd ~ 

,並檢查:

ls -a 

也可以使用環境變量HIERO_PLUGIN_PATH指定任意數量的用戶定義路徑,就像標準的Unix環境變量PATH一樣。

爲此,您需要在.bash_profile中設置environment variable。爲了在終端PICO編輯器中運行只需鍵入(記住,你需要一個管理員的sudo命令密碼):

sudo pico .bash_profile 

,並在其中粘貼這些三線(其他城市swift<yourName>並保存此文件):

echo HIERO environment var is set... 
export HIERO_PLUGIN_PATH=/Users/swift/.hiero/Python/StartupUI/ 
export PATH=$PATH:$HIERO_PLUGIN_PATH 

寫了一個文件CTRLØ

退出pico編輯無線網絡日CTRLX

重啓終端

在終端,你可以打印這個環境變量類型:

printenv HIERO_PLUGIN_PATH 

你應該把那StartupUI目錄menu.py,裏面的任何一套xxxx.pyxxxx.pyc文件,以及__init__.py文件。

現在您可以在Terminal Mode中使用/Users/swift/.hiero/Python/StartupUI/路徑。

enter image description here

BLOCK 2:setup for UI Sessions

要分配一個HIERO搜索加載插件時,你需要創建__init__.py文件具有以下行電流路徑:

import hiero.core 

path='/Users/swift/.hiero/Python/Startup/' 
hiero.core.addPluginPath(path) 

後使Python/Startup/子目錄在~/.nuke/文件夾下。

這不是一個錯誤:我輸入.nuke

然後將此__init__.py文件放入/Users/swift/.nuke/Python/Startup/目錄。

重新啓動HIERO(或NUKE STUDIO)如果它工作。

之後推出HIERO或NUKE STUDIO,並在HIERO的腳本編輯器或在NUKE STUDIO的腳本編輯器運行

print hiero.core.pluginPath() 

命令,你會看到這樣的結果:

enter image description here

之後,您將在/Users/swift/.nuke/Python/Startup/目錄中找到新的__init__.pyc文件。

將您啓動HIERO時發現的每個包裝或模塊導入並添加到內置包hiero.plugins

測試1:custom_guides.py

我沒有HIERO的商業版本,所以我測試使用NUKE STUDIO NC custom_guides.py腳本(發現here)。

我將custom_guides.py放入~/.nuke/Python/Startup目錄,然後在NUMB的init.py文件中添加兩行,位於~/.nuke目錄下。

import nuke 
nuke.pluginAddPath("./Python/Startup") 

我能說的只有一點:"it works"做相同的動作,像我一樣,它會爲HIERO工作。

看看safe_zonemasking_ratio下拉菜單。他們是不同的:之前和之後。

之前上傳custom_guides.py腳本:

enter image description here

# file custom_guides.py contains these lines: 

viewer_masks = [ 
    hiero.ui.guides.MaskGuide("NTSC", 0.91), 
    hiero.ui.guides.MaskGuide("PAL", 1.09), 
    hiero.ui.guides.MaskGuide("NTSC_16:9", 1.21), 
    hiero.ui.guides.MaskGuide("PAL_16:9", 1.46), 
    hiero.ui.guides.MaskGuide("Cinemascope 2:1", 2.0) 
] 

TEST 2:web_browser.py

enter image description here

上傳custom_guides.py腳本後我把web_browser.py文件放在~/.nuke/Python/Startup目錄下。這個Python腳本使用PySide Qt編寫的帶有瀏覽器的可停靠面板。

enter image description here

我沒有HIERO的商業版本,所以我測試使用NUKE STUDIO NC web_browser.py腳本(發現here)。

+1

好吧,沒有錯誤很酷,但是我應該在「.hiero/Python/StartupUI」目錄下的meny.py文件中寫什麼? – Marc

+0

關於交互式會話的所有內容與NUKE的init.py和menu.py相同,這是NUKE開發人員指南的摘錄:「任何名爲menu.py的文件都放在NUKE的一個插件中當NUKE在交互式會話中啓動時,會自動讀取-in路徑目錄,但是,當爲命令行會話或渲染啓動NUKE時,它不會被讀取,因此,應該使用menu.py專門用於命令ar e只與交互式會話有關「。 – andy

+0

https://www.thefoundry.co.uk/products/nuke/developers/105/pythondevguide/startup.html#menu-py – andy