Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取pyd文件的路径,即相当于_文件的路径___Python_Cython_Cythonize - Fatal编程技术网

Python 如何获取pyd文件的路径,即相当于_文件的路径__

Python 如何获取pyd文件的路径,即相当于_文件的路径__,python,cython,cythonize,Python,Cython,Cythonize,我有一个文件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,

我有一个文件
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
回溯(最近一次呼叫最后一次):
文件“C:\Projects\Wrapper.py”,第1行,在
进口包装
文件“package.py”,第40行,在init包(package.c:4411)中
名称错误:未定义名称“\uuuuu文件\uuuuu”
如何获取.pyd文件的位置。还有一种方法可以检查它是作为.pyd还是.py运行的

谢谢大家!

似乎是这样。 但在加载模块后,您可以获得
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

def get_file():
    return __file__
您可以检查
\uuuu file\uuuu
变量以了解加载的文件。 还要记住python的搜索顺序:
pyd(so)、py、pyw(对于windows)、pyc

更多关于它的信息在这里

找到了两种工作方法

  • 涉及模块:

  • import
    从同一级别导入一些文件,并使用其
    文件属性:

    import os
    from . import __file__ as _initpy_file
    CURR = os.path.dirname(os.path.realpath(_initpy_file))
    
    实际上,它不必是
    \uuuu init\uuuu.py
    模块,您可以添加和导入任何[empty]文件以使其工作


  • 当在支持多阶段模块初始化(Python>=3.5)的Python版本上运行时,
    \uuu文件
    现在可以在Cython(0.27 ish)的最新版本中工作。请参阅以了解添加该文件的位置。

    这对我不起作用,可能是因为我正在调用
    get\u file()
    ,而该调用又会尝试查找
    \u file\uuuu
    。实际上,我一直在寻找解决办法。一个环境变量:)在
    中尝试除外
    。但是,当我尝试将.py转换为.pyd二进制文件时,我遇到了新的障碍。看起来,在制作.py包时,有太多的事情被认为是理所当然的,而在将其转换为.pyd时,这些事情并不适用
    
    import os
    from . import __file__ as _initpy_file
    CURR = os.path.dirname(os.path.realpath(_initpy_file))