python - setup.py sdist bdist_wheel
python - setup.py sdist bdist_wheel
我决定创建一个名为 "NsmPY" 的小模块。完成模块背后的代码(可在 GitHub 上获得)后,我开始尝试将这个新模块上传到 PyPi。然而,当我运行必要的命令python3 setup.py sdist bdist_wheel
时,程序吐出一个错误:
running sdist
running egg_info
writing nsmpy.egg-info\PKG-INFO
writing dependency_links to nsmpy.egg-info\dependency_links.txt
writing top-level names to nsmpy.egg-info\top_level.txt
reading manifest file 'nsmpy.egg-info\SOURCES.txt'
writing manifest file 'nsmpy.egg-info\SOURCES.txt'
warning: sdist: standard file not found: should have one of README, README.rst, README.txt, README.md
running check
creating nsmpy-1.0
creating nsmpy-1.0\nsmpy.egg-info
copying files to nsmpy-1.0...
copying setup.cfg -> nsmpy-1.0
copying setup.py -> nsmpy-1.0
copying nsmpy.egg-info\PKG-INFO -> nsmpy-1.0\nsmpy.egg-info
copying nsmpy.egg-info\SOURCES.txt -> nsmpy-1.0\nsmpy.egg-info
copying nsmpy.egg-info\dependency_links.txt -> nsmpy-1.0\nsmpy.egg-info
copying nsmpy.egg-info\top_level.txt -> nsmpy-1.0\nsmpy.egg-info
Writing nsmpy-1.0\setup.cfg
Creating tar archive
removing 'nsmpy-1.0' (and everything under it)
running bdist_wheel
running build
running build_scripts
creating build
creating build\scripts-3.7
error: [Errno 2] No such file or directory: 'nsmpy'
但是,在我的代码中绝对没有提到文件或目录 'nsmpy',即便如此,代码、setup.py、setup.cfg 和所有其他设置文件都是全部保存在文件夹'nsmpy'.
此外,当我最终将它上传到我在 PyPi 上的帐户时(我 运行 python setup.py sdist
)它确实有效 - 直到我真正决定使用 pip install nsmpy
安装模块,它给了我以下错误:
Collecting nsmpy==1.0.0
Using cached nsmpy-1.0.tar.gz (628 bytes)
Building wheels for collected packages: nsmpy
Building wheel for nsmpy (setup.py) ... error
ERROR: Command errored out with exit status 1:
command: 'c:\users\sciencepi\anaconda3\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\setup.py'"'"'; __file__='"'"'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d 'C:\Users\SCIENC~1\AppData\Local\Temp\pip-wheel-mm6p5lwl'
cwd: C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\
Complete output (6 lines):
running bdist_wheel
running build
running build_scripts
creating build
creating build\scripts-3.7
error: [Errno 2] No such file or directory: 'nsmpy'
----------------------------------------
ERROR: Failed building wheel for nsmpy
Running setup.py clean for nsmpy
Failed to build nsmpy
ERROR: Error checking for conflicts.
Traceback (most recent call last):
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 3021, in _dep_map
return self.__dep_map
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 2815, in __getattr__
raise AttributeError(attr)
AttributeError: _DistInfoDistribution__dep_map
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 3012, in _parsed_pkg_info
return self._pkg_info
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 2815, in __getattr__
raise AttributeError(attr)
AttributeError: _pkg_info
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_internal\commands\install.py", line 517, in _warn_about_conflicts
package_set, _dep_info = check_install_conflicts(to_install)
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_internal\operations\check.py", line 114, in check_install_conflicts
package_set, _ = create_package_set_from_installed()
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_internal\operations\check.py", line 53, in create_package_set_from_installed
package_set[name] = PackageDetails(dist.version, dist.requires())
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 2736, in requires
dm = self._dep_map
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 3023, in _dep_map
self.__dep_map = self._compute_dependencies()
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 3032, in _compute_dependencies
for req in self._parsed_pkg_info.get_all('Requires-Dist') or []:
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 3014, in _parsed_pkg_info
metadata = self.get_metadata(self.PKG_INFO)
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 1420, in get_metadata
value = self._get(path)
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 1616, in _get
with open(path, 'rb') as stream:
PermissionError: [Errno 13] Permission denied: 'c:\users\sciencepi\anaconda3\lib\site-packages\tensorflow-2.1.0.dist-info\METADATA'
Installing collected packages: nsmpy
Running setup.py install for nsmpy ... error
ERROR: Command errored out with exit status 1:
command: 'c:\users\sciencepi\anaconda3\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\setup.py'"'"'; __file__='"'"'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\SCIENC~1\AppData\Local\Temp\pip-record-9ap1k2wf\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\sciencepi\anaconda3\Include\nsmpy'
cwd: C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\
Complete output (6 lines):
running install
running build
running build_scripts
creating build
creating build\scripts-3.7
error: file 'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\nsmpy' does not exist
----------------------------------------
ERROR: Command errored out with exit status 1: 'c:\users\sciencepi\anaconda3\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\setup.py'"'"'; __file__='"'"'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\SCIENC~1\AppData\Local\Temp\pip-record-9ap1k2wf\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\sciencepi\anaconda3\Include\nsmpy' Check the logs for full command output.
是的,我使用的是最新模块和最新版本的所有内容。
from setuptools import setup
setup(
name="nsmpy",
version="1.0.0",
scripts=['nsmpy'])
setuptools.setup
函数的scripts
参数应该是一个文件名列表。所以在你的情况下,我认为它应该是:
setuptools.setup(
# ...
scripts=['nsmpy.py'],
# ...
)
另请注意,scripts
参数有些失宠。现在建议使用 console_scripts
入口点 代替,为此有更多最新的文档可用。
参考文献:
- https://docs.python.org/3/distutils/apiref.html#distutils.core.setup
- https://docs.python.org/3/distutils/setupscript.html#installing-scripts
- https://packaging.python.org/guides/distributing-packages-using-setuptools/#scripts
- https://setuptools.readthedocs.io/en/latest/setuptools.html#automatic-script-creation
我决定创建一个名为 "NsmPY" 的小模块。完成模块背后的代码(可在 GitHub 上获得)后,我开始尝试将这个新模块上传到 PyPi。然而,当我运行必要的命令python3 setup.py sdist bdist_wheel
时,程序吐出一个错误:
running sdist
running egg_info
writing nsmpy.egg-info\PKG-INFO
writing dependency_links to nsmpy.egg-info\dependency_links.txt
writing top-level names to nsmpy.egg-info\top_level.txt
reading manifest file 'nsmpy.egg-info\SOURCES.txt'
writing manifest file 'nsmpy.egg-info\SOURCES.txt'
warning: sdist: standard file not found: should have one of README, README.rst, README.txt, README.md
running check
creating nsmpy-1.0
creating nsmpy-1.0\nsmpy.egg-info
copying files to nsmpy-1.0...
copying setup.cfg -> nsmpy-1.0
copying setup.py -> nsmpy-1.0
copying nsmpy.egg-info\PKG-INFO -> nsmpy-1.0\nsmpy.egg-info
copying nsmpy.egg-info\SOURCES.txt -> nsmpy-1.0\nsmpy.egg-info
copying nsmpy.egg-info\dependency_links.txt -> nsmpy-1.0\nsmpy.egg-info
copying nsmpy.egg-info\top_level.txt -> nsmpy-1.0\nsmpy.egg-info
Writing nsmpy-1.0\setup.cfg
Creating tar archive
removing 'nsmpy-1.0' (and everything under it)
running bdist_wheel
running build
running build_scripts
creating build
creating build\scripts-3.7
error: [Errno 2] No such file or directory: 'nsmpy'
但是,在我的代码中绝对没有提到文件或目录 'nsmpy',即便如此,代码、setup.py、setup.cfg 和所有其他设置文件都是全部保存在文件夹'nsmpy'.
此外,当我最终将它上传到我在 PyPi 上的帐户时(我 运行 python setup.py sdist
)它确实有效 - 直到我真正决定使用 pip install nsmpy
安装模块,它给了我以下错误:
Collecting nsmpy==1.0.0
Using cached nsmpy-1.0.tar.gz (628 bytes)
Building wheels for collected packages: nsmpy
Building wheel for nsmpy (setup.py) ... error
ERROR: Command errored out with exit status 1:
command: 'c:\users\sciencepi\anaconda3\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\setup.py'"'"'; __file__='"'"'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d 'C:\Users\SCIENC~1\AppData\Local\Temp\pip-wheel-mm6p5lwl'
cwd: C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\
Complete output (6 lines):
running bdist_wheel
running build
running build_scripts
creating build
creating build\scripts-3.7
error: [Errno 2] No such file or directory: 'nsmpy'
----------------------------------------
ERROR: Failed building wheel for nsmpy
Running setup.py clean for nsmpy
Failed to build nsmpy
ERROR: Error checking for conflicts.
Traceback (most recent call last):
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 3021, in _dep_map
return self.__dep_map
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 2815, in __getattr__
raise AttributeError(attr)
AttributeError: _DistInfoDistribution__dep_map
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 3012, in _parsed_pkg_info
return self._pkg_info
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 2815, in __getattr__
raise AttributeError(attr)
AttributeError: _pkg_info
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_internal\commands\install.py", line 517, in _warn_about_conflicts
package_set, _dep_info = check_install_conflicts(to_install)
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_internal\operations\check.py", line 114, in check_install_conflicts
package_set, _ = create_package_set_from_installed()
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_internal\operations\check.py", line 53, in create_package_set_from_installed
package_set[name] = PackageDetails(dist.version, dist.requires())
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 2736, in requires
dm = self._dep_map
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 3023, in _dep_map
self.__dep_map = self._compute_dependencies()
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 3032, in _compute_dependencies
for req in self._parsed_pkg_info.get_all('Requires-Dist') or []:
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 3014, in _parsed_pkg_info
metadata = self.get_metadata(self.PKG_INFO)
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 1420, in get_metadata
value = self._get(path)
File "c:\users\sciencepi\anaconda3\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 1616, in _get
with open(path, 'rb') as stream:
PermissionError: [Errno 13] Permission denied: 'c:\users\sciencepi\anaconda3\lib\site-packages\tensorflow-2.1.0.dist-info\METADATA'
Installing collected packages: nsmpy
Running setup.py install for nsmpy ... error
ERROR: Command errored out with exit status 1:
command: 'c:\users\sciencepi\anaconda3\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\setup.py'"'"'; __file__='"'"'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\SCIENC~1\AppData\Local\Temp\pip-record-9ap1k2wf\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\sciencepi\anaconda3\Include\nsmpy'
cwd: C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\
Complete output (6 lines):
running install
running build
running build_scripts
creating build
creating build\scripts-3.7
error: file 'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\nsmpy' does not exist
----------------------------------------
ERROR: Command errored out with exit status 1: 'c:\users\sciencepi\anaconda3\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\setup.py'"'"'; __file__='"'"'C:\Users\SCIENC~1\AppData\Local\Temp\pip-install-98ihityv\nsmpy\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\SCIENC~1\AppData\Local\Temp\pip-record-9ap1k2wf\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\sciencepi\anaconda3\Include\nsmpy' Check the logs for full command output.
是的,我使用的是最新模块和最新版本的所有内容。
from setuptools import setup
setup(
name="nsmpy",
version="1.0.0",
scripts=['nsmpy'])
setuptools.setup
函数的scripts
参数应该是一个文件名列表。所以在你的情况下,我认为它应该是:
setuptools.setup(
# ...
scripts=['nsmpy.py'],
# ...
)
另请注意,scripts
参数有些失宠。现在建议使用 console_scripts
入口点 代替,为此有更多最新的文档可用。
参考文献:
- https://docs.python.org/3/distutils/apiref.html#distutils.core.setup
- https://docs.python.org/3/distutils/setupscript.html#installing-scripts
- https://packaging.python.org/guides/distributing-packages-using-setuptools/#scripts
- https://setuptools.readthedocs.io/en/latest/setuptools.html#automatic-script-creation