回答編集履歴

5

修正

2015/09/08 11:26

投稿

退会済みユーザー
test CHANGED
@@ -1,46 +1,20 @@
1
+ 察しが悪いので質問から全く目的が見えなかったのですが、
2
+
1
- が、内部的な相対パス指定によって目的のパス生成を行いたい。ことは分りました
3
+ Pythonモジュールの探索パスを絶対パス指定から動的な相対パス指定に変更したい。ということなのでしょうか。
2
4
 
3
5
 
4
6
 
5
- 、こけだ目的判然としません。
7
+ もしそうでしまずは[こ](http://docs.python.jp/3/tutorial/modules.html#the-module-search-path)を参照してくさい。(既に質問のコードで行っている思うので、探索パス自体の動作は理解されているとは思うのです
6
8
 
7
9
 
8
10
 
9
- ・最終的にどのようパスを得たいのか(絶対パス? どこかを基準にした相対パス?)
11
+ なモジュールimportは、[こん方法](http://www.diveintopython.net/functional_programming/dynamic_import.html)があります。
10
12
 
11
- ・その為にどんな入力を行うのか(ベースパスが 'Z:/user/maya/python/rig' だとして、その他に行う入力は 'chara_creation' だけではありませんよね?)
12
-
13
-
14
-
15
- 結局これがなにかしらのパスを生成する関数だとして、使う目的が判然としません。
16
-
17
- 目的が決まれば実装きるように思いますがまずは上司方に入出力について具体的な要件確認をした方よいと思います。
13
+ 質問のコードで、sys.path.insert後で以下を実行すると対象モジュールオブジェクト生成行われると思います。
18
-
19
-
20
-
21
- ちなみに、'Z:/user/maya/python/rig' + 'chara_creation' + 'hoge' + 'fuga' .. のように結合する操作でしたら、以下のメソッドがあります。
22
-
23
-
24
14
 
25
15
  ```Python
26
16
 
27
- import os.path
28
-
29
-
30
-
31
- #ベースパス
32
-
33
- basePath = 'Z:/user/maya/python/rig'
17
+ chara_creation = __import__('chara_creation');
34
-
35
- #それ以下の各階層名
36
-
37
- partNames = ['chara_creation', 'hoge', 'fuga', 'piyo']
38
-
39
-
40
-
41
- #os.path.join で連結
42
-
43
- print( os.path.join(basePath, *partNames) )
44
18
 
45
19
  ```
46
20
 

4

修正

2015/09/08 11:26

投稿

退会済みユーザー
test CHANGED
@@ -1,16 +1,24 @@
1
- 目的のメソッド[これ](http://docs.python.jp/2/library/os.path.html#os.path.relpath)ですね
1
+ 目的が、内部的な相対パス指定によって目的パス生成を行いたい。こと分かりました
2
2
 
3
3
 
4
4
 
5
- [os.pathモジュール](http://docs.python.jp/2/library/os.path.html)は繰り返し読んでおくといいと思います。
6
-
7
- いろいろ発見でき
5
+ ただ、これだけだと目的が判然としせん
8
-
9
- ---
10
6
 
11
7
 
12
8
 
9
+ ・最終的にどのようなパスを得たいのか(絶対パス? どこかを基準にした相対パス?)
10
+
11
+ ・その為にどんな入力を行うのか(ベースパスが 'Z:/user/maya/python/rig' だとして、その他に行う入力は 'chara_creation' だけではありませんよね?)
12
+
13
+
14
+
15
+ 結局これがなにかしらのパスを生成する関数だとして、使う目的が判然としません。
16
+
13
- りストレートに答えを求めらても、考え気あるのかどか不安なりますが、り考えもなもないので例書くと、以下のうに余分な記述を省たパスを生成してくれます。
17
+ 目的が決まれば実装できうに思いますが、まずは上司の方に入出力につ具体的な要件確認した方がよいと思います。
18
+
19
+
20
+
21
+ ちなみに、'Z:/user/maya/python/rig' + 'chara_creation' + 'hoge' + 'fuga' .. のように結合する操作でしたら、以下のメソッドがあります。
14
22
 
15
23
 
16
24
 
@@ -20,32 +28,26 @@
20
28
 
21
29
 
22
30
 
23
- basePath = r'Z:/user/maya/python/rig'
31
+ #ベースパス
24
32
 
25
- dstPath = r'Z:/user/maya/python/rig/hoge/fuga/piyo'
33
+ basePath = 'Z:/user/maya/python/rig'
34
+
35
+ #それ以下の各階層名
36
+
37
+ partNames = ['chara_creation', 'hoge', 'fuga', 'piyo']
26
38
 
27
39
 
28
40
 
29
- print( os.path.relpath(dstPath, basePath) )
41
+ #os.path.join で連結
30
42
 
31
-
32
-
33
- #result: hoge/fuga/piyo
34
-
35
-
36
-
37
- #指定パスがベースパスの外に出ている場合の例
38
-
39
- dstPath = r'Z:/user/maya/python/hoge/fuga/piyo'
40
-
41
- print( os.path.relpath(dstPath, basePath) )
43
+ print( os.path.join(basePath, *partNames) )
42
-
43
-
44
-
45
- #result: ../hoge/fuga/piyo
46
44
 
47
45
  ```
48
46
 
49
47
 
50
48
 
49
+ ---
50
+
51
+
52
+
51
- 「ベースパス+結果出力されるパス」が指定パスと同じ場所指すように取り計らってくれます。
53
+ [過去の返答]は、履歴参照..

3

追補

2015/09/08 10:47

投稿

退会済みユーザー
test CHANGED
@@ -47,3 +47,5 @@
47
47
  ```
48
48
 
49
49
 
50
+
51
+ 要は「ベースパス+結果出力されるパス」が、指定パスと同じ場所を指すように取り計らってくれます。

2

誤記修正

2015/09/08 09:29

投稿

退会済みユーザー
test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  #指定パスがベースパスの外に出ている場合の例
38
38
 
39
- dstPath = r'Z:/user/maya/python/rig/hoge/fuga/piyo'
39
+ dstPath = r'Z:/user/maya/python/hoge/fuga/piyo'
40
40
 
41
41
  print( os.path.relpath(dstPath, basePath) )
42
42
 

1

追補

2015/09/08 09:25

投稿

退会済みユーザー
test CHANGED
@@ -5,3 +5,45 @@
5
5
  [os.pathモジュール](http://docs.python.jp/2/library/os.path.html)は繰り返し読んでおくといいと思います。
6
6
 
7
7
  いろいろ発見できます。
8
+
9
+ ---
10
+
11
+
12
+
13
+ あまりストレートに答えを求められても、考える気あるのかどうか不安になりますが、あまり考え方もなにもないので例を書くと、以下のように余分な記述を省いたパスを生成してくれます。
14
+
15
+
16
+
17
+ ```Python
18
+
19
+ import os.path
20
+
21
+
22
+
23
+ basePath = r'Z:/user/maya/python/rig'
24
+
25
+ dstPath = r'Z:/user/maya/python/rig/hoge/fuga/piyo'
26
+
27
+
28
+
29
+ print( os.path.relpath(dstPath, basePath) )
30
+
31
+
32
+
33
+ #result: hoge/fuga/piyo
34
+
35
+
36
+
37
+ #指定パスがベースパスの外に出ている場合の例
38
+
39
+ dstPath = r'Z:/user/maya/python/rig/hoge/fuga/piyo'
40
+
41
+ print( os.path.relpath(dstPath, basePath) )
42
+
43
+
44
+
45
+ #result: ../hoge/fuga/piyo
46
+
47
+ ```
48
+
49
+