2012-07-25 20 views
1

我知道模塊的名稱不應該有破折號。python模塊駐留在名稱中包含破折號字符的存儲庫中

這裏是我的倉庫結構

my-repo-name/ 
    src/ 
    tests/ 
     __init__.py 
     tests.py 
    fab/ 
     __init__.py 
     fabfile.py 

    README.rst 
    __init__.py 

在我的測試中,我需要進口fabfile.py運行測試。但因爲名稱有短劃線,所以我不能執行from my-module-name.fab.fabfile import X,Y,Z或相對導入,因爲它是非包。

任何建議如何做到這一點沒有與__import__(...)黑客或將其添加到sys路徑?我應該只添加另一個目錄嗎?

+3

我想改變你的回購協議的名稱可能是你最好的選擇,因爲你不能用它在蟒蛇的名稱中短線做任何事情。其次,最好的辦法是在不同的(可導入的)名稱下創建一個到該目錄的符號鏈接。 – mgilson 2012-07-25 17:47:07

+0

謝謝..但我見過使用名稱中帶短劃線的存儲庫的人。一個符號鏈接...我想過它,但'hg'使硬鏈接。也許問題是更多關於如何構建我的回購,以便它不實際從'my-repo-name'導入?謝謝。 – user1012451 2012-07-25 17:48:22

+0

一個存儲庫,當然。大多數情況下,repo不是模塊/軟件包,它是模塊/軟件包目錄的容器......並且名稱中不能有短劃線。 – 2012-07-25 17:49:49

回答

6

使用importlib.import module

import importlib 
fabfile = importlib.import_module('my-repo-name.fab.fabfile', None) 
X = fabfile.X 

但你真的應該只是改變了存儲庫的名稱。爲了過渡,您可以創建一個臨時symlink

$ mv my-repo-name my_repo_name 
$ ln -s my_repo_name my-repo-name 
+0

是的。這當然是一個解決方案。謝謝。但我想這個問題更像是如何重構我的回購庫,以便我不需要重命名它並仍然可以導入。我也見過使用回購名稱的人。 – user1012451 2012-07-25 17:49:13

+1

重命名目錄。 – phihag 2012-07-25 17:51:00

+1

我想你想'mv'不是'我' – mgilson 2012-07-25 17:52:32

相關問題