2017-05-06 56 views
1

我想爲ProjectQ製作conda食譜。在linux和osx下的構建過程中發生了一些奇怪的事情。我可以手動構建和安裝軟件包(即使用克隆的git repo目錄中的'python setup.py install')。但是,當我製作完全相同的配方時,它會失敗。在Linux和OSX上。爲什麼conda如果我在python 3.6.1下構建,將py27_0附加到我的軟件包名稱上?

我的搭建配方是here。特別奇怪的是,儘管我在meta.yaml文件的構建需求下指定了python 3.6。*,但conda-build過程將程序包命名爲「projectq-v0.3.0-py27_0」,並且在安裝包時,它試圖在Python 2.7目錄之一中這樣做,這是我認爲它會失敗。

很清楚我在做一些愚蠢的事情,但我不能爲我的生活找出什麼。任何人都可以看到我做錯了什麼嗎?提前致謝。

+0

好吧,我發現了一個愚蠢的錯誤,那個固定的好奇心,但沒有使整個事情工作。我需要在meta.yaml文件的build和run需求下指定「python 3.6。*」。我只做過前者,包名取決於後者。說得通。所以現在這個包被稱爲正確的東西「projectq-v0.3.0-py36_0」,但是當它試圖在python2.7庫目錄之一中安裝東西時仍然失敗。在macosx和linux上仍然失敗(根據我的經驗,這意味着我做了一些愚蠢的事情)。 – Rick

+0

你的根conda安裝的Python版本是什麼?如果它不是3.6,請嘗試在命令行中指定python版本 - 'conda build projectq --python = 3.6' – darthbith

+0

@darthbith謝謝,我試過了,我也試過指定「python 3.6。*」依賴關係。我正在構建正確的可執行文件(我得到的「py36_0」以包名結尾),但安裝仍然失敗。 – Rick

回答

1

我明白了這一點。感謝所有花時間瀏覽我的問題的人。任何人都不可能爲我想出這個辦法,因爲它對我所安裝的軟件包非常具體。我會試着總結一下我學到的東西,以防其他人遇到不同的事情。

  1. 首先,正如我在其中一條評論中指出的那樣,如果您在構建版本中指定了特定的版本要求,最好在運行時指定相同的版本要求。最初我在build下指定了「python 3.6。*」,但運行時只是「python」。這導致軟件包被命名爲「-py27_0」,因爲軟件包名稱可以理解地取決於運行所需的內容,而不是構建它。
  2. 真的很棘手的一件事是瞭解在setup.py腳本中指定了額外的需求,當我手動運行「python setup.py install」時會自動安裝這些需求,但當我嘗試運行時運行的是而不是在conda下建造。一旦我將這些要求添加到meta.yaml配方中,一切都會生成並測試正常。

所以,教訓是要與構建和運行之間的暢達要求相一致,並確保您有列出的所有要求,包括獎金可能在setup.py文件中指定要求。

再次感謝所有看過此內容的人。

+0

您可以通過在構建中編寫如下內容來自動處理Python依賴項:https://github.com/Cantera/conda-recipes/blob/master/cantera/meta.yaml#L20並查看運行時依賴關係。這樣,當你編寫'conda build projectq --python = X。它是自動處理的:-)(免責聲明:我是該代碼的作者,但我不隸屬於Continuum,所以可能不是這樣做的「正確」方式) – darthbith

+0

雙括號中的值是由構建腳本根據構建過程中設置的變量填充的Jinja變量 – darthbith

+0

@darthbith再次感謝提示。感謝Cantera的工作(我在Goodwin工作的時候和我一起是朋友)。 – Rick

相關問題