teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

ダイナミックにロードした場合の問題点を追加

2019/04/02 01:50

投稿

退会済みユーザー
answer CHANGED
@@ -31,4 +31,4 @@
31
31
  print(type(Bar()))
32
32
  ```
33
33
 
34
- でも、名前空間の管理のためにやるのはやめたほうがいいでしょうね。プラグインとかダイナミックにソースをロードしたいとか、フレームワークを作るとか特殊な用途です。
34
+ でも、名前空間の管理のためにやるのはやめたほうがいいでしょうね。確認していませんがPyCharmなどIDEの支援をあえて放棄することになるでしょうし、静的解析をするツールも動くと思えません。プラグインとかダイナミックにソースをロードしたいとか、フレームワークを作るとか特殊な用途です。

2

Python3対応

2019/04/02 01:50

投稿

退会済みユーザー
answer CHANGED
@@ -1,7 +1,7 @@
1
1
  こんなやり方でいかがでしょうか。
2
2
 
3
3
 
4
- ```Python3
4
+ ```Python2
5
5
  import imp
6
6
 
7
7
  imp.load_source('hogepackage', 'foo.py')
@@ -17,4 +17,18 @@
17
17
  <class 'hogepackage.Foo'>
18
18
  ```
19
19
 
20
+ Deprecation Warningが出るとのことですので、importlibを使った場合
21
+
22
+ ```Python3
23
+ from importlib.machinery import SourceFileLoader
24
+
25
+
26
+ SourceFileLoader('hogepackage', 'foo.py').load_module()
27
+ SourceFileLoader('hogepackage', 'bar.py').load_module()
28
+
29
+ from hogepackage import Foo, Bar
30
+ print(type(Foo()))
31
+ print(type(Bar()))
32
+ ```
33
+
20
34
  でも、名前空間の管理のためにやるのはやめたほうがいいでしょうね。プラグインとかダイナミックにソースをロードしたいとか、フレームワークを作るとか特殊な用途です。

1

コメント追加

2019/04/02 01:43

投稿

退会済みユーザー
answer CHANGED
@@ -15,4 +15,6 @@
15
15
 
16
16
  ```
17
17
  <class 'hogepackage.Foo'>
18
- ```
18
+ ```
19
+
20
+ でも、名前空間の管理のためにやるのはやめたほうがいいでしょうね。プラグインとかダイナミックにソースをロードしたいとか、フレームワークを作るとか特殊な用途です。