2015-04-03 43 views
0

我想運行碼頭容器child1和child2。 可以說,我們有:如何將模塊中的目錄導入到Python路徑中,該路徑是從子文件夾到原始源的符號鏈接?

修訂

|parent 
|-----|child1/ 
      src_folder/ 
         __init__.py 
         mod1.py 
|-----|child2/ 
      __init__.py 
      symlink_target_folder 
      mody.py 
      test1_dir/ 
         smfile.py 

我做了什麼樣

ln -rs ~/parent/child1/src_folder ~/parent/child2/symlink_target_folder 

在mody.py當我這樣做,

from symlink_target_folder import mod1 

有用;

但test1_dir> smfile.py當我做

from .child2.symlink_target_folder import mod1 

它拋出回導入錯誤。

我想知道如何從該目錄訪問相同的模塊? 可以將symlink_target_folder導出到PYTHONPATH中。 我已經做了

出口PYTHONPATH = $ PYTHONPATH:/ symlink_target_folder

這樣` 我可以從mody.py

from symlink_target_folder.mod1 import SmFoo 

做,但我不認爲它是由於PYTHONPATH。只是symlink_target_folder和mody.py在同一個文件夾中。

我該如何解決這個問題? 什麼是解決這個問題的更好方法? 我做check this out

+0

要確定你在問什麼:問題是,當你試圖在'test1_dir'目錄執行'smfile.py'命令時,腳本會拋出'ImportError',命令是'python smfile.py 「對嗎? – FunkySayu 2015-04-06 13:40:06

+0

像'cd child2/test1_dir/&& python smfile.py'對嗎? – FunkySayu 2015-04-06 13:40:43

+0

@FunkySayu是的。 – user2290820 2015-04-06 16:47:23

回答

0

這是我如何解決這個問題;

symlink_target_folder

然後,simplepth:

鑑於

|parent 
|-----|child1/ 
      src_folder/ 
         __init__.py 
         mod1.py 
|-----|child2/ 
      __init__.py 
      symlink_target_folder 
      mody.py 
      test1_dir/ 
         smfile.py 

下我的child2文件,該文件有這個創造somepth.pth。下的child2腳本PY是這樣的:

import site 
import os 

site.addsitedir(os.path.dirname(__file__)) 

當您運行的child2> simplepth.py 其中simplepth是,它會添加目錄的任何.pth文件,這自然指向/ child1/srcFolder並將其導入到SYS。路徑

現在你可以簡單地做:

import mod1

解決了我的問題。

因此,如果您只想運行test1_dir/smFile.py 您可以添加test1_dir的父目錄並將其添加到site.addsitedir,然後導入mod1,它將起作用。

2

所以,你有下面的樹結果:

. 
├── child1 
│   └── srcFolder 
│    ├── __init__.py 
│    ├── __init__.pyc 
│    ├── mod1.py 
│    └── mod1.pyc 
└── child2 
    ├── __init__.py 
    ├── mody.py 
    ├── symlink_target_folder -> ../child1/srcFolder 
    └── test1_dir 
     ├── __init__.py 
     └── smFile.py 

如果你把下面的標題在smFile.py,進口將工作:

import sys 
import os 

sys.path.append(os.path.abspath(os.sep.join([".."]))) 

from symlink_target_folder import mod1 

mod1.foo() 

而不是用一個符號鏈接,您還可以使用該方式添加路徑:

sys.path.append(os.path.abspath(os.sep.join(["..", "..", "child1", "srcFolder"]))) 
+0

符號鏈接是一個需求。我想知道是否使用符號鏈接來實現它? – user2290820 2015-04-03 14:20:17

+0

你試過從symlink_target_folder.md1導入SmFoo嗎? – FunkySayu 2015-04-03 14:24:39

+0

這就是我堅持的地方。我不知道爲什麼會引發ImportError:沒有名爲symlink_target_folder.md1的模塊; 我正在運行一個bash腳本,首先將這個符號鏈接的路徑導出到PYTHONPATH。它仍然會拋出錯誤。不知道它是否正確導出。 – user2290820 2015-04-03 14:27:33

相關問題