如何解决Python Pypi 包安装适用于 Linux,但不适用于 Windows
简介
我正在创建一个包来解决路线问题。我在繁重的数学部分使用 Cython 来提高速度。
在 Linux SO (Ubuntu 18.04) 中一切正常。但在 Windows 10 中无法通过 pip install skroute
我使用的是 Python 3.7。
这是 setup.py
文件:
import os
from setuptools import setup,find_packages
from setuptools.extension import Extension
from Cython.Build import cythonize
import Cython.Compiler.Options
Cython.Compiler.Options.annotate = True
extensions = cythonize([
Extension(
"skroute.heuristics.brute._base_brute_force._base_brute_force",sources=["skroute/heuristics/brute/_base_brute_force/_base_brute_force.pyx"]),Extension(
"skroute.metaheuristics.genetics._base_genetics._utils_genetic",sources=["skroute/metaheuristics/genetics/_base_genetics/_utils_genetic.pyx"]),Extension(
"skroute._utils._utils",sources=["skroute/_utils/_utils.pyx"]),Extension(
"skroute.metaheuristics.genetics._base_genetics._base_genetic",sources=["skroute/metaheuristics/genetics/_base_genetics/_base_genetic.pyx"]),Extension(
"skroute.metaheuristics.simulated_annealing._base_simulated_annealing._base_simulated_annealing",sources=["skroute/metaheuristics/simulated_annealing/_base_simulated_annealing/_base_simulated_annealing.pyx"]),Extension(
"skroute.metaheuristics.simulated_annealing._base_simulated_annealing._utils_sa",sources=["skroute/metaheuristics/simulated_annealing/_base_simulated_annealing/_utils_sa.pyx"]),])
HERE = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(HERE,"README.md")) as fid:
README = fid.read()
with open(os.path.join(HERE,"requirements.txt")) as f:
REQUIREMENTS = f.read().splitlines()
setup(
name="scikit-route",version="1.0.0a1 ",description="Compute Routes easy and fast",long_description=README,long_description_content_type="text/markdown",url="https://github.com/arubiales/scikit-route",author="Alberto Rubiales",author_email="al.rubiales.b@gmail.com",license="MIT",classifiers=[
"License :: OSI Approved :: MIT License","Programming Language :: Python","Programming Language :: Python :: 3.6","Programming Language :: Python :: 3.7","Programming Language :: Python :: 3.8","Programming Language :: Python :: 3.9"
],packages=find_packages(),setup_requires=[
'setuptools>=18.0',"cython"
],install_requires=REQUIREMENTS,ext_modules = extensions,include_package_data=True,package_data={"": ["datasets/_data/_latitude_longitude/*.tsp","datasets/*.txt","datasets/_data/_money_cost/*.pkl"]},)
问题
当我尝试在 Windows 10 上从 Pypi 安装软件包时,出现以下错误:
ERROR: Command errored out with exit status 1:
command: 'C:\Users\whast\anaconda3\python.exe' -c 'import sys,setuptools,tokenize; sys.argv[0] = '"'"'C:\\Users\\whast\\AppData\\Local\\Temp\\pip-install-dhvqmkkc\\scikit-route\\setup.py'"'"'; _file='"'"'C:\\Users\\whast\\AppData\\Local\\Temp\\pip-install-dhvqmkkc\\scikit-route\\setup.py'"'"';f=getattr(tokenize,'"'"'open'"'"',open)(file);code=f.read().replace('"'"'\r\n'"'"','"'"'\n'"'"');f.close();exec(compile(code,__file_,'"'"'exec'"'"'))' egg_info --egg-base 'C:\Users\whast\AppData\Local\Temp\pip-pip-egg-info-uqcw3lxf'
cwd: C:\Users\whast\AppData\Local\Temp\pip-install-dhvqmkkc\scikit-route\
Complete output (11 lines):
Traceback (most recent call last):
File "<string>",line 1,in <module>
File "C:\Users\whast\AppData\Local\Temp\pip-install-dhvqmkkc\scikit-route\setup.py",line 40,in <module>
extensions = cythonize([
File "C:\Users\whast\anaconda3\lib\site-packages\Cython\Build\Dependencies.py",line 965,in cythonize
module_list,module_metadata = create_extension_list(
File "C:\Users\whast\anaconda3\lib\site-packages\Cython\Build\Dependencies.py",line 815,in create_extension_list
for file in nonempty(sorted(extended_iglob(filepattern)),"'%s' doesn't match any files" % filepattern):
File "C:\Users\whast\anaconda3\lib\site-packages\Cython\Build\Dependencies.py",line 114,in nonempty
raise ValueError(error_msg)
ValueError: 'skroute/heuristics/brute/_base_brute_force/_base_brute_force.pyx' doesn't match any files
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
此处的安装正在尝试 cythonize
一个 .pyx
文件,但找不到路径。
创建包的过程
我为创建包所做的是:
- 运行
python -m setup.py sdist bdist_wheel
以创建.whl
文件 - 使用
auditwheel
修复文件,需要将带有 Cython 模块的包上传到 Pypi 并使该包通过所有 linux 发行版可用。我跑auditwheel reapair dist/scikit_route....whl
- 我将
.whl
创建的setuptools
替换为auditwheel
文件夹中从dist
修复的dist
- 最后一步是将
python -m twine upload dist/*
文件夹上传到 Pypi,所以我运行sys.path.append("/".join(os.path.abspath(__file__).split("/")[:-1]))
试图解决它
-
将路径附加到系统,而 skroute 正在使用
Python setup.py sdist bdist_wheel
安装但没有成功 - 安装从git下载的包。它可以工作,但我希望能够从 Pypi 安装它。
正如我在第二点所说的,如果我从 Github 存储库下载并运行 pip install dist/*.whl
和 auditwheel
之后,我可以在 Windows 10 中安装该软件包,所以我怀疑问题出在是当我使用 .whl
修复 auditwheel
正如我在“创建包的过程”中所说的第二点:
使用auditwheel reapair dist/scikit_route....whl
修复文件,需要上传带有Cython模块的包到Pypi。我跑 makeStickersWithFlatButton
如果你知道如何让它工作,我将非常感谢你的帮助。
可能感兴趣的链接:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。