Python ModuleNotFoundError与setup.py一起使用编译的pyc模块
我通常可以导入编译后的Python ModuleNotFoundError与setup.py一起使用编译的pyc模块,python,python-3.x,python-import,setup.py,pyc,Python,Python 3.x,Python Import,Setup.py,Pyc,我通常可以导入编译后的.pyc模块以及.py,但是当尝试使用setup.py打包简单项目时,我会得到编译后的.pyc模块的ModuleNotFoundError异常。因为只有在使用setup.py时才会发生这种情况,否则工作正常,我不知道是否有什么东西需要setup.py才能工作 项目结构目前如下所示: proj ├── FAILING.pyc ├── __init__.py ├── aux/ │ ├── __init__.py │ └── aux.c └── main.py 以及se
.pyc
模块以及.py
,但是当尝试使用setup.py
打包简单项目时,我会得到编译后的.pyc
模块的ModuleNotFoundError
异常。因为只有在使用setup.py
时才会发生这种情况,否则工作正常,我不知道是否有什么东西需要setup.py
才能工作
项目结构目前如下所示:
proj
├── FAILING.pyc
├── __init__.py
├── aux/
│ ├── __init__.py
│ └── aux.c
└── main.py
以及setup.py
:
from setuptools import setup, Extension, find_packages
DISTNAME = 'proj'
INSTALL_REQUIRES = [
'cython>=0.29.13',
'numpy>=1.16.4'
]
PYTHON_REQUIRES = '>=3.6'
ENTRY_POINTS = {
'console_scripts': ['proj = proj.main:main']
}
def setup_extensions(metadata):
ext_modules = [Extension('proj.aux.aux', sources=['proj/aux/aux.c'])]
metadata['ext_modules'] = ext_modules
def setup_package():
metadata = dict(
name=DISTNAME,
version='0.1',
package_dir={'': '.'},
packages=find_packages(),
entry_points=ENTRY_POINTS,
python_requires=PYTHON_REQUIRES,
install_requires=INSTALL_REQUIRES,
zip_safe=False,
)
setup_extensions(metadata)
setup(**metadata)
if __name__ == '__main__':
setup_package()
#!/usr/bin/env python3
import proj.aux.aux as aux
import proj.FAILING
def main():
print('Hello World')
main.py
:
from setuptools import setup, Extension, find_packages
DISTNAME = 'proj'
INSTALL_REQUIRES = [
'cython>=0.29.13',
'numpy>=1.16.4'
]
PYTHON_REQUIRES = '>=3.6'
ENTRY_POINTS = {
'console_scripts': ['proj = proj.main:main']
}
def setup_extensions(metadata):
ext_modules = [Extension('proj.aux.aux', sources=['proj/aux/aux.c'])]
metadata['ext_modules'] = ext_modules
def setup_package():
metadata = dict(
name=DISTNAME,
version='0.1',
package_dir={'': '.'},
packages=find_packages(),
entry_points=ENTRY_POINTS,
python_requires=PYTHON_REQUIRES,
install_requires=INSTALL_REQUIRES,
zip_safe=False,
)
setup_extensions(metadata)
setup(**metadata)
if __name__ == '__main__':
setup_package()
#!/usr/bin/env python3
import proj.aux.aux as aux
import proj.FAILING
def main():
print('Hello World')
如果我只是尝试在repl上导入FAILING.pyc
,一切正常:
>>> import FAILING
>>>
但是如果我首先运行python3 setup.py intall
,然后调用proj
,我会得到以下错误:
$ proj
Traceback (most recent call last):
File "/path/to/bin/proj", line 11, in <module>
load_entry_point('proj==0.1', 'console_scripts', 'proj')()
File "/path/to/lib/python3.8/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/path/to/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2852, in load_entry_point
return ep.load()
File "/path/to/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2443, in load
return self.resolve()
File "/path/to/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2449, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "/path/to/lib/python3.8/site-packages/proj-0.1-py3.8-macosx-10.14-x86_64.egg/proj/main.py", line 4, in <module>
import proj.FAILING
ModuleNotFoundError: No module named 'proj.FAILING'
$proj
回溯(最近一次呼叫最后一次):
文件“/path/to/bin/proj”,第11行,在
加载入口点('proj==0.1','console\u scripts','proj')()
文件“/path/to/lib/python3.8/site packages/pkg_resources/_init__.py”,第489行,在加载入口点
返回获取分布(dist)。加载入口点(组、名称)
文件“/path/to/lib/python3.8/site packages/pkg_resources/_init__.py”,第2852行,在加载入口点
返回ep.load()
文件“/path/to/lib/python3.8/site packages/pkg_resources/_init__.py”,第2443行,已加载
返回self.resolve()
文件“/path/to/lib/python3.8/site-packages/pkg_-resources/_-init__.py”,第2449行,解析中
module=\uuuu导入(self.module\u name,fromlist=[''\uuuu name\uuuuuuu'],级别=0)
文件“/path/to/lib/python3.8/site packages/proj-0.1-py3.8-macosx-10.14-x86_64.egg/proj/main.py”,第4行,在
导入项目失败
ModuleNotFoundError:没有名为“项目失败”的模块
我也在VirtualEnvironment中运行它,尽管我猜这与错误无关
我做错了什么,或者我需要做什么改变才能使这项工作正常进行?下面是一个小演示,它构建了一个包含.pyc文件的源发行版和控制盘 请注意,我已经从您的示例中删除了大部分内容,因为cython的内容与您的问题无关
set-euxo-pipefail
rm-rf dist testpkg setup.py
cat>setup.pypython setup.py安装
非常旧,可能不是您想要的(它安装为egg
)--您可能需要pip安装。
并确保将.pyc
作为数据文件包含(因为默认情况下通常不包括它们)pip安装。
导致与上述相同的modulenofounderror
。。。我确实读了一些关于数据文件和setup.py
的内容,但没有与.pyc
建立连接。我会调查的。