This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2012年09月12日 15:32 by kgabor79, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| instest.py | kgabor79, 2012年09月12日 15:32 | Test script | ||
| Messages (6) | |||
|---|---|---|---|
| msg170389 - (view) | Author: Gabor Kovacs (kgabor79) | Date: 2012年09月12日 15:32 | |
The attached script works in 2.6(.4) but not in 2.7(.3); the script cannot locate its own source code if invoked by relative path and work directory has changed. If line 8 uncommented, everything is fine due to caching. I think this is related to issue #4050 changes in inspect.py. ~ kgabor$ python ./instest.py None ./instest.py Traceback (most recent call last): File "./instest.py", line 10, in <module> print inspect.getsourcefile(A), inspect.getfile(A),inspect.findsource(A) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 529, in findsource raise IOError('source code not available') IOError: source code not available ~ kgabor$ pwd /Users/kgabor ~ kgabor$ python /Users/kgabor/instest.py /Users/kgabor/instest.py /Users/kgabor/instest.py (['import inspect\n', 'import os\n', '\n', 'class A:\n', ' def __init__(self):\n', ' self.a=1\n', '\n', '#print inspect.getsourcefile(A),inspect.getfile(A),inspect.findsource(A)\n', "os.chdir('/')\n", 'print inspect.getsourcefile(A), inspect.getfile(A),inspect.findsource(A)\n'], 3) |
|||
| msg209678 - (view) | Author: Yury Selivanov (yselivanov) * (Python committer) | Date: 2014年01月29日 20:52 | |
Sadly, there is nothing we can do about it, as we simply don't have absolute paths in __file__ attributes in your case. |
|||
| msg209693 - (view) | Author: R. David Murray (r.david.murray) * (Python committer) | Date: 2014年01月29日 23:37 | |
Note that this is fixed in 3.4. That is, in 3.4 __file__ paths are made absolute when the import happens. |
|||
| msg209694 - (view) | Author: Yury Selivanov (yselivanov) * (Python committer) | Date: 2014年01月29日 23:42 | |
Hm, maybe just for the imports? This simple script, run it directly: test.py: def foo(): pass print(foo.__code__.co_filename) "$ python3.4 test.py" will still print relative path "test.py". Hence, if you do 'os.chdir' in the above script, the introspection code will break. There are many similar issues on the tracker, btw. |
|||
| msg209697 - (view) | Author: R. David Murray (r.david.murray) * (Python committer) | Date: 2014年01月30日 01:59 | |
__file__ is absolute for imports, yes. I didn't check co_filename, maybe that needs to be fixed too. |
|||
| msg209698 - (view) | Author: Yury Selivanov (yselivanov) * (Python committer) | Date: 2014年01月30日 02:09 | |
Yes. I'll create an issue for that. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:35 | admin | set | github: 60135 |
| 2014年01月30日 02:09:18 | yselivanov | set | messages: + msg209698 |
| 2014年01月30日 01:59:30 | r.david.murray | set | messages: + msg209697 |
| 2014年01月29日 23:42:59 | yselivanov | set | messages: + msg209694 |
| 2014年01月29日 23:37:36 | r.david.murray | set | messages: + msg209693 |
| 2014年01月29日 20:52:50 | yselivanov | set | status: open -> closed nosy: + yselivanov messages: + msg209678 resolution: rejected |
| 2012年09月12日 15:47:58 | r.david.murray | set | nosy:
+ r.david.murray |
| 2012年09月12日 15:32:22 | kgabor79 | create | |