2013-10-08 48 views
0

我正在編寫一個Python腳本,該腳本將被不同操作系統上的多個人使用,我試圖找出包含第三方包的最佳方法用戶在運行腳本之前不必自行安裝軟件包。我正在使用的特定庫是Requests包。當我通過pip安裝它時,它非常適合我,但是當我下載源代碼並嘗試從項目根目錄導入時,它不起作用。我要麼得到「嘗試相對導入非包」或「沒有模塊名爲MyProject.request」取決於我如何嘗試導入它。Python - 爲跨系統腳本使用外部庫

所以我想我的第一個問題是,我是否接近這個權利?我從來沒有爲更多的用戶編寫Python腳本,而不僅僅是我自己,所以我從來不關心像軟件包安裝這樣的問題。是否包含Requests庫的源並將其相對於我的項目導入的正確方法,還是有一種更簡單的方法?

作爲一個後續問題,如果我在正確的軌道上,在我的項目中包含這個包的正確過程是什麼?現在我的文件結構如下所示:

MyProject/ 
    __init__.py 
    main.py 
    requests/ 
     requests/ 
      __init__.py 
      [bunch of other stuff] 
     [other files/folders] 

在main.py我試過from .MyProject.requests import requestsfrom .requests import requests,無一不給我。「試圖在非包相對進口」我還沒有搞砸sys.path,但我看到了一個混淆的建議,這是否是「正確」的方式。我主要關心的是讓這個腳本在用戶機器上運行,除了運行它之外,它們不必做任何事情。我不希望用戶必須安裝外部軟件包,但我似乎無法通過嘗試導入源代碼來實現它。

+0

您是否嘗試刪除'requests'子目錄?我認爲'MyProject/requests/requests/[一堆東西]'太多了;嘗試'MyProject/requests/[一堆東西]'。 – Evert

+2

實際上,發生的情況是,你試圖導入「外部」請求目錄,它不是一個包(因爲它沒有'__init __。py'文件。因此刪除一層子目錄可能會解決你的問題 – Evert

+0

是的,似乎是這樣的問題,我不確定請求包的工作方式,所以我不知道「外部」目錄中的任何文件是否對實際包非常重要,但看起來他們不是。 – Ben

回答

0

根據埃弗特的迴應,我的問題似乎是多個「請求」目錄。當我將子目錄向上移動並從請求源中消除多餘的文件/目錄時,它完美地工作。