我决定创建一个名为"NsmPY"的小模块。一旦我完成了模块后面的代码(可在GitHub上获得(,我就开始尝试将这个新模块上传到PyPi。然而,当我运行必要的命令python3 setup.py sdist bdist_wheel
时,程序抛出了一个错误:
running sdist
running egg_info
writing nsmpy.egg-infoPKG-INFO
writing dependency_links to nsmpy.egg-infodependency_links.txt
writing top-level names to nsmpy.egg-infotop_level.txt
reading manifest file 'nsmpy.egg-infoSOURCES.txt'
writing manifest file 'nsmpy.egg-infoSOURCES.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.0nsmpy.egg-info
copying files to nsmpy-1.0...
copying setup.cfg -> nsmpy-1.0
copying setup.py -> nsmpy-1.0
copying nsmpy.egg-infoPKG-INFO -> nsmpy-1.0nsmpy.egg-info
copying nsmpy.egg-infoSOURCES.txt -> nsmpy-1.0nsmpy.egg-info
copying nsmpy.egg-infodependency_links.txt -> nsmpy-1.0nsmpy.egg-info
copying nsmpy.egg-infotop_level.txt -> nsmpy-1.0nsmpy.egg-info
Writing nsmpy-1.0setup.cfg
Creating tar archive
removing 'nsmpy-1.0' (and everything under it)
running bdist_wheel
running build
running build_scripts
creating build
creating buildscripts-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:userssciencepianaconda3python.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('"'"'rn'"'"', '"'"'n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d 'C:UsersSCIENC~1AppDataLocalTemppip-wheel-mm6p5lwl'
cwd: C:UsersSCIENC~1AppDataLocalTemppip-install-98ihityvnsmpy
Complete output (6 lines):
running bdist_wheel
running build
running build_scripts
creating build
creating buildscripts-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:userssciencepianaconda3libsite-packagespip_vendorpkg_resources__init__.py", line 3021, in _dep_map
return self.__dep_map
File "c:userssciencepianaconda3libsite-packagespip_vendorpkg_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:userssciencepianaconda3libsite-packagespip_vendorpkg_resources__init__.py", line 3012, in _parsed_pkg_info
return self._pkg_info
File "c:userssciencepianaconda3libsite-packagespip_vendorpkg_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:userssciencepianaconda3libsite-packagespip_internalcommandsinstall.py", line 517, in _warn_about_conflicts
package_set, _dep_info = check_install_conflicts(to_install)
File "c:userssciencepianaconda3libsite-packagespip_internaloperationscheck.py", line 114, in check_install_conflicts
package_set, _ = create_package_set_from_installed()
File "c:userssciencepianaconda3libsite-packagespip_internaloperationscheck.py", line 53, in create_package_set_from_installed
package_set[name] = PackageDetails(dist.version, dist.requires())
File "c:userssciencepianaconda3libsite-packagespip_vendorpkg_resources__init__.py", line 2736, in requires
dm = self._dep_map
File "c:userssciencepianaconda3libsite-packagespip_vendorpkg_resources__init__.py", line 3023, in _dep_map
self.__dep_map = self._compute_dependencies()
File "c:userssciencepianaconda3libsite-packagespip_vendorpkg_resources__init__.py", line 3032, in _compute_dependencies
for req in self._parsed_pkg_info.get_all('Requires-Dist') or []:
File "c:userssciencepianaconda3libsite-packagespip_vendorpkg_resources__init__.py", line 3014, in _parsed_pkg_info
metadata = self.get_metadata(self.PKG_INFO)
File "c:userssciencepianaconda3libsite-packagespip_vendorpkg_resources__init__.py", line 1420, in get_metadata
value = self._get(path)
File "c:userssciencepianaconda3libsite-packagespip_vendorpkg_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:userssciencepianaconda3python.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('"'"'rn'"'"', '"'"'n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:UsersSCIENC~1AppDataLocalTemppip-record-9ap1k2wfinstall-record.txt' --single-version-externally-managed --compile --install-headers 'c:userssciencepianaconda3Includensmpy'
cwd: C:UsersSCIENC~1AppDataLocalTemppip-install-98ihityvnsmpy
Complete output (6 lines):
running install
running build
running build_scripts
creating build
creating buildscripts-3.7
error: file 'C:UsersSCIENC~1AppDataLocalTemppip-install-98ihityvnsmpynsmpy' does not exist
----------------------------------------
ERROR: Command errored out with exit status 1: 'c:userssciencepianaconda3python.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('"'"'rn'"'"', '"'"'n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:UsersSCIENC~1AppDataLocalTemppip-record-9ap1k2wfinstall-record.txt' --single-version-externally-managed --compile --install-headers 'c:userssciencepianaconda3Includensmpy' 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-脚本
- https://packaging.python.org/guides/distributing-packages-using-setuptools/#scripts
- https://setuptools.readthedocs.io/en/latest/setuptools.html#automatic-脚本创建