我有一个文件package.py
我想要打包到package.pyd
。我在package.py
CURR = os.path.dirname(os.path.realpath(__file__))
在我运行package.py
时工作正常,但当我将package.pyd
导入另一个文件wrapper.py
时,我收到以下错误消息
Traceback (most recent call last):
File "C:\Projects\Wrapper.py", line 1, in <module>
import package
File "package.py", line 40, in init package (package.c:4411)
NameError: name '__file__' is not defined
如何获取.pyd文件的位置。还有一种方法可以检查它是以.pyd还是.py运行。
谢谢!
答案 0 :(得分:1)
似乎是__file__ variable not available in module init。
但是你可以在加载模块后获得__file__
:
def get_file():
return __file__
您可以检查__file__
变量以了解加载了哪个文件。
另请记住python的搜索顺序:pyd (so), py, pyw(for windows), pyc
。
有关它的更多信息,请参阅此this question
找到两种工作方法。
涉及inspect模块:
import inspect
import sys
import os
if hasattr(sys.modules[__name__], '__file__'):
_file_name = __file__
else:
_file_name = inspect.getfile(inspect.currentframe())
CURR = os.path.dirname(os.path.realpath(_file_name))
import
来自同一级别并使用其__file__
属性的某个文件:
import os
from . import __file__ as _initpy_file
CURR = os.path.dirname(os.path.realpath(_initpy_file))
实际上,它不一定是__init__.py
模块,您可以添加和导入任何[空]文件以使其正常工作。
答案 1 :(得分:0)
__file__
现在可以在支持多阶段模块初始化的Python版本(Python> = 3.5)上运行时,在最新的Cython版本(0.27 ish)中运行。请参见https://github.com/cython/cython/issues/1715,了解添加点。